当前位置:   article > 正文

mysql主从复制,主从数据一致性恢复_主从复制 主从一致性

主从复制 主从一致性

一、pt-table-sync工具恢复数据*
恢复主从数据一致之前,要先检验主从数据是否一致
主从数据的一致性校验请看
https://blog.csdn.net/weixin_45310179/article/details/106212929

我们可以通过使用另一个工具pt-table-sync进行数据的同步
手册地址:https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html
在主库中执行
h:为从库的ip
[root@localhost home]# pt-table-sync --sync-to-master h=192.168.81.140,u=root,p=root,P=3306 --databases=mytest --print
DELETE FROM test.t WHERE id=‘3’ LIMIT 1 /percona-toolkit src_db:test src_tbl:t src_dsn:h=127.0.0.1,p=…,u=root dst_db:test dst_tbl:t dst_dsn:h=192.168.153.131,p=…,u=root lock:1 transaction:1 changing_src:check_data.checksums replicate:check_data.checksums bidirectional:0 pid:14262 user:root host:localhost.localdomain/;

如果出现错误:可能是账号的权限不够,
在这里插入图片描述
在这里插入图片描述
更新账号权限后:
在这里插入图片描述
[root@localhost home]# pt-table-sync --sync-to-master h=192.168.81.140,u=root_sync,p=root,P=
3306 --databases=mytest --execute

在这里插入图片描述
该工具先maseter的信息, 然后再是从库上的信息;参数建议
–replicate= :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。
–databases= : 指定执行同步的数据库,多个用逗号隔开。
–tables= :指定执行同步的表,多个用逗号隔开。
–sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。
h=127.0.0.1 :服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址。 u=root :帐号。
p=123456 :密码。
–print :打印,但不执行命令。
–execute :执行命令。

我们也可以把这个编辑成脚本,定期通过centos定时器定期检查, 对于我们来说我们执行在意的是通过pt-table-checksums 显示信息中的DIFFS信息

[root@localhost ~]# pt-table-checksum --tables=t --socket=/tmp/mysql.sock --databases=mytest --user=root --password=‘root’ – replicate=check_data.checksum --no-check-binlog-format --recursion-method
dsn=t=mytest.dsns,h=192.168.81.140,P=3306,u=slave_check,p=root
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
09-28T16:16:52 0 1 3 1 0 0.015 test.t

对于centos来说我们可以通过 awk 命令获取到 DIFFS 中的值,然后判断这个值是否不等于0;则可以判断是否一致
[root@localhost ~]# pt-table-checksum --tables=t --socket=/tmp/mysql.sock --databases=mytest --user=root --password=‘root’ – replicate=check_data.checksum --no-check-binlog-format --recursion-method dsn=t=mytest.dsns,h=192.168.81.140,P=3306,u=slave_check,p=root | awk ‘NR>1{sum+=$3}END{print sum}’

在这里插入图片描述

下一步要做的就是编辑shell脚本 - 额外解释,所谓的sh脚本就是可以直接模拟centos执行我们在命令太执行的命令然后根据返回的结果进行相应的逻辑处理,我 们可以创建一个pt-table-checksums;注意!!!windows下编辑的sh脚本在linux中执行可能会存在一定的问题,推荐可以直接在xshell中编辑sh脚本这样问题会 少很多

[root@localhost ~]# touch pt-check-sync.sh
[root@localhost ~]# vi pt-check-sync.sh
#!/usr/bin/env bash
NUM=pt-table-checksum --tables=test --socket=/tmp/mysql.sock --databases=laravel --user=root --password='root' -- replicate=check_data.checksum --no-check-binlog-format --recursion-method dsn=t=mytest.dsns,h=192.168.81.140,P=3306,u=slave_check,p=root | awk 'NR>1{sum+=$3}END{print sum}'
if [ $NUM -eq 0 ] ;then
echo “Data is ok!”
else
echo “Data is error!”
pt-table-sync --sync-to-master h=192.168.81.140,u=root_sync,p=root,P=3306 --databases=mytest --print
pt-table-sync --sync-to-master h=192.168.81.140,u=root_sync,p=root,P=3306 --databases=mytest --execute fi

在这里插入图片描述
在这里插入图片描述
[root@localhost ~]# sh pt-check-sync.sh

然后可以通过编辑crontab -e 定时执行这个脚本就好

* * * * * /shell/pt-check-sync.sh   //shell脚本位置
  • 1

在这里插入图片描述
记得给权限
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1005951
推荐阅读
相关标签
  

闽ICP备14008679号