简介
此脚本用于在两个 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 # 添加权限 chmod 700 data_sync.sh # 修改参数定义 vim data_sync.sh # 编辑账号密码信息 # 运行脚本 sh data_sync.sh --sync_type=[type] [options] # 后台运行 nohup sh data_sync.sh --sync_type=[type] [options] & # 后台运行适用于数据量大的情况
参数
--sync_type=[all|database|table] # 指定同步类型 (同步整个实例/同步数据库/同步表) --source_database=<源库名> # 指定源数据库名 --target_database=<目标库名> # 指定目标数据库名 --table=<表名> # 指定单个表同步或多个表(多个表用 , 分隔) --table_file=<文件路径> # 指定列出表名的文件路径 适用于表多的情况
常见用法
创建账号
使用前创建具有权限的同步用户
# 创建账号 create user your_user@'%' identified by 'your_password'; # 授权账号 grant all on *.* to your_user@'%'; # 刷新权限信息 flush privileges; # 同步结束后请删除用户 # drup user your_user@'%';
在脚本开头配置连接信息
vim data_sync.sh # 配置源数据库和目标数据库的连接信息 SOURCE_HOST="10.0.0.1" # 源 IP SOURCE_PORT=3306 # 源端口 SOURCE_USER="your_user" # 源用户 SOURCE_PASSWORD='your_password' # 源密码 TARGET_HOST="10.0.0.2" # 目标 IP TARGET_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.log
和data_sync_mysql_xxx.log
mysql
或mysqldump
命令的报错查看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
本脚本仅供学习交流,使用前请自行验证。