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

简介

此脚本用于在两个 MySQL 实例间同步数据,基于 mysqldumpmysql 进行数据同步。可选择全量、单库、单表、多表、指定文件同步表的多种同步方式,常见使用场景如:生产库同步数据至测试库、表在线备份、搭建主从等场景。并且可以通过调整 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.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
    

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值