# data_sync **Repository Path**: hh688/data_sync ## Basic Information - **Project Name**: data_sync - **Description**: MySQL 不同实例间数据同步,支持全量、单库、单表、多表数据同步。 - **Primary Language**: Shell - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2024-07-20 - **Last Updated**: 2025-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: 数据同步, MySQL, backup ## README ## 简介 此脚本用于在两个 `MySQL` 实例间同步数据,基于 `mysqldump` 和 `mysql` 进行数据同步。可选择全量、单库、单表、多表、指定文件同步表的多种同步方式,常见使用场景如:生产库同步数据至测试库、表在线备份、搭建主从等场景。并且可以通过调整 `mysqldump`的备份参数,实现其他种类的同步。 也可以将`mysqldump`替换成 `mydumper` 多线程工具,加速数据同步。 项目地址:https://gitee.com/hh688/data_sync ## 功能 * 全量数据同步 * 单库数据同步 * 单表数据同步 * 多表数据同步 * 文件列表数据同步 ## 使用脚本 ```shell # 安装格式转换工具 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=<文件路径> # 指定列出表名的文件路径 适用于表多的情况 ``` ## 用法 ### 创建账号 使用前创建具有权限的同步用户 ```sql # 创建账号 create user your_user@'%' identified by 'your_password'; # 授权账号 grant all on *.* to your_user@'%'; # 刷新权限信息 flush privileges; # 同步结束后请删除用户 # drup user your_user@'%'; ``` 在脚本开头配置连接信息 ```shell 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" # 目标密码 ``` ### 全量同步 **同步整个实例的数据** 适用于搭建主从或搭建测试库 ```shell ./data_sync.sh --sync_type=all # --sync_type=all 同步类型选择全量同步 ``` ### 同步库 **同步单个数据库的数据** ```shell ./data_sync.sh --sync_type=database --source_database=test --target_database=test1 # --sync_type=database 同步类型选择数据库 必选参数 # --source_database=test 选择源库为 test 必选参数 # --target_database=test1 选择目标库为 test1 // 可选参数,默认和源库名保持一致 ``` ### 同步表 **同步单表或多表** ```shell ./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 // 可选参数,默认和源库名保持一致 ``` **同步文件内的表** 适用于需要同步的表较多的情况 ```shell ./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 参数··· & ``` ## 小技巧 * 搭建主从时 `mysqldump` 添加 `--master-data=1` 参数,可以设置同步的位置点, 会将同步位置点写入 `mysql.slave_master_info` 表 * 同步数据量较大时尽量使用`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 ``` 本脚本仅供学习交流,使用前请自行验证。