主从同步是利用binlog日志进行同步,mysqldump是通过拉取sql,然后倒入,对于大表会非常慢
pt-table-sync 单纯的以文件的形式检查两个表的一致性,不一致就会将将其变为一致,所以速度会快很多
安装
# 安装插件
# yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl perl-DBI -y
# 安装本地工具
下载rpm可以去这里搜搜看,一般都有
https://pkgs.org/search/?q=percona-toolkit
搜索这个包 percona-toolkit 找到对应版本下载即可
# yum -y localinstall percona-toolkit-3.2.1-1.el7.x86_64.rpm
# 查看列表
# yum list | grep percona-toolkit
percona-toolkit.x86_64 3.2.1-1.el7 installed
# 查看帮助
# pt-table-checksum --help
编写同步脚本
# cat bf_cp_db.sh
#!/bin/bash
# 获取源库中的所有表名,当然你不需要同步所有表就可以自己写个存有表名的文件,格式就是一个表一行
mysql -h172.30.0.42 -uroot -p'xxxxxxxx' -e "use bf_cp_db; show tables;" > /sh/bf_cp_db
# sed删除表名文件中的第一行Tables_in_bf_cp_db无用信息
sed -i '1d' bf_cp_db
# 生产列表变量
list=`cat /sh/bf_cp_db`
# 循环列表进行同步
for i in $list;
do
echo ------------$i-------------
pt-table-sync --execute h=172.30.0.42,P=3306,D=bf_cp_db,t=$i,u=root,p='xxxxxx' h=172.30.0.30,P=16673,u=root,p=xxxxxxx --no-check-slave --print
done
172.30.0.42 为源库
172.30.0.30 为被同步库
此同步方式如果源库修改了表结构,被同步库将无法同步数据