0


【MySQL】手把手教你MySQL数据同步

简介

此脚本用于在两个

MySQL

实例间同步数据,基于

mysqldump

mysql

进行数据同步。可选择全量、单库、单表、多表、指定文件同步表的多种同步方式,常见使用场景如:生产库同步数据至测试库、表在线备份、搭建主从等场景。并且可以通过调整

mysqldump

的备份参数,实现其他种类的同步。
也可以将

mysqldump

替换成

mydumper

多线程工具,加速数据同步。

项目地址:https://gitee.com/hh688/data_sync

功能

  • 全量数据同步
  • 单库数据同步
  • 单表数据同步
  • 多表数据同步
  • 文件列表数据同步

使用脚本

# 安装格式转换工具
yum install-y dos2unix

# 下载脚本curl-o data_sync.sh https://gitee.com/hh688/data_sync/raw/master/data_sync.sh

# 转换格式
dos2unix data_sync.sh

# 添加权限chmod700 data_sync.sh

# 修改参数定义vim  data_sync.sh  # 编辑账号密码信息# 运行脚本sh data_sync.sh --sync_type=[type][options]# 后台运行nohupsh data_sync.sh --sync_type=[type][options]&# 后台运行适用于数据量大的情况

参数

  --sync_type=[all|database|table]  # 指定同步类型 (同步整个实例/同步数据库/同步表)
  --source_database=<源库名>         # 指定源数据库名
  --target_database=<目标库名>       # 指定目标数据库名
  --table=<表名>                     # 指定单个表同步或多个表(多个表用 , 分隔)
  --table_file=<文件路径>             # 指定列出表名的文件路径 适用于表多的情况

常见用法

创建账号

使用前创建具有权限的同步用户

# 创建账号createuser your_user@'%' identified by'your_password';# 授权账号grantallon*.*to your_user@'%';# 刷新权限信息
flush privileges;# 同步结束后请删除用户# drup user your_user@'%'; 

在脚本开头配置连接信息

vim data_sync.sh
# 配置源数据库和目标数据库的连接信息SOURCE_HOST="10.0.0.1"# 源 IPSOURCE_PORT=3306# 源端口SOURCE_USER="your_user"# 源用户SOURCE_PASSWORD='your_password'# 源密码TARGET_HOST="10.0.0.2"# 目标 IPTARGET_PORT=3306# 目标端口TARGET_USER="your_user"# 目标用户TARGET_PASSWORD="your_password"# 目标密码

全量同步

同步整个实例的数据
适用于搭建主从或搭建测试库

./data_sync.sh --sync_type=all

# --sync_type=all  同步类型选择全量同步

同步库

同步单个数据库的数据

./data_sync.sh --sync_type=database --source_database=test --target_database=test1

# --sync_type=database     同步类型选择数据库 必选参数# --source_database=test   选择源库为 test  必选参数# --target_database=test1  选择目标库为 test1  // 可选参数,默认和源库名保持一致

同步表

同步单表或多表

./data_sync.sh --sync_type=table  --source_database=test --table=table1,table2,table3  --target_database=test1

# --sync_type=table        同步类型选择表   // 必选参数# --table=table1,table2    选择需要同步的表(多表时用","分隔) // 必选参数# --source_database=test   选择源库为 test  // 必选参数# --target_database=test1  选择目标库为 test1  // 可选参数,默认和源库名保持一致

同步文件内的表

将表名写入到文件中,适用于需要同步的表较多的情况

./data_sync.sh --sync_type=table  --source_database=test --table_file=./table_file.txt --target_database=test1

# --sync_type=table        同步类型选择表     // 必选参数# --table_file=./file.txt  保存表名的文件路径  // 必选参数# --source_database=test   选择源库为 test    // 必选参数# --target_database=test1  选择目标库为 test1  // 可选参数,默认和源库名保持一致

后台运行

后台运行脚本 防止退出

nohup ./data_sync.sh 参数··· &

小技巧

  • 同步数据量较大时尽量使用nohup运行脚本
  • 脚本包含两个日志文件data_sync_xxx.logdata_sync_mysql_xxx.log- mysqlmysqldump 命令的报错查看 data_sync_mysql_xxx.log即可- 脚本报错和同步信息查看 data_sync_xxx.log即可
  • 使用前检查你的 mysql 版本是否支持 GTID 并在 MYSQLDUMP_SOURCE_CONN变量中修改备份的参数
  • 所有备份参数都可以在 MYSQLDUMP_SOURCE_CONN 变量中修改
  • 常见需要修改的参数mysqldump: -R, --routines # 备份存储过程 -E, --events # 备份事件 --triggers # 备份触发器 --ignore-table # 忽略表 --set-gtid-purged # 是否记录 GTID

本脚本仅供学习交流,使用前请自行验证。

标签: 数据库 MySQL 运维

本文转载自: https://blog.csdn.net/weixin_45385457/article/details/140626348
版权归原作者 hh真是个慢性子 所有, 如有侵权,请联系我们删除。

“【MySQL】手把手教你MySQL数据同步”的评论:

还没有评论