简介
此脚本用于在两个 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
本脚本仅供学习交流,使用前请自行验证。