MySQL主从同步校验与重新同步

主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum、mysqldiff、pt-table-checksum等,每种工具各有优缺,本文就pt-table-checksum工具进行介绍和记录实验环节。

下载二进制版本的percona-toolkit工具箱

https://www.percona.com/downloads/percona-toolkit

本文用的是2.2.18版本

[[email protected]
~]# tar xvf percona-toolkit-2.2.18.tar.gz

[[email protected]
~]# cd percona-toolkit-2.2.18

[[email protected]
percona-toolkit-2.2.18]# perl Makefile.PL

[[email protected] percona-toolkit-2.2.18]# make && make install

主库创建checksums用户用于校验主从是否一致

mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO ‘checksums‘@‘%‘ IDENTIFIED BY ‘MANAGER‘;

开始执行校验,在校验结束后,会在test库下创建表名为checksums的表用于存储主从一致性信息

[[email protected] ~]#/usr/local/bin/pt-table-checksum h=‘192.168.1.250‘,u=‘checksums‘,p=‘MANAGER‘,P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

从库可以执行本条SQL来查看哪些表有主从不一致的情况,此时主从是一致的所以没有结果

mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
Empty set (0.03 sec)

我们先删除www库下的某张表的某一行

[SQL]delete from decorate_order where id=10;
受影响的行: 1
时间: 0.003s

再次运行同步校验

[[email protected] ~]#/usr/local/bin/pt-table-checksum h=‘192.168.1.250‘,u=‘checksums‘,p=‘MANAGER‘,P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现在从库上执行本条SQL可以看到主从不一致的表名

mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
+-----+----------------+------------+--------+
| db  | tbl            | total_rows | chunks |
+-----+----------------+------------+--------+
| www |
decorate_order |      25356 |      1 |
+-----+----------------+------------+--------+
1 row in set (0.00sec)

同理我们删掉erp库下的某张表的某一行

[SQL]delete from erp_mard id=104;
受影响的行: 1
时间: 0.002s

再次运行同步校验

[[email protected] ~]#/usr/local/bin/pt-table-checksum h=‘192.168.1.250‘,u=‘checksums‘,p=‘MANAGER‘,P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现刚刚删除的erp_mard表已经进入到了我们的主从不一致记录表里

mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
+-----+----------------+------------+--------+
| db  | tbl            | total_rows | chunks |
+-----+----------------+------------+--------+
| erp |
erp_mard       |      11183 |      1 |
| www |
decorate_order |      25356 |      1 |
+-----+----------------+------------+--------+
2 rows in set (0.02sec)

我们在主库执行pt-table-sync命令来进行重新同步

[[email protected] ~]#/usr/local/bin/pt-table-sync --execute --replicate  test.checksums  h=‘192.168.1.250‘,u=‘sys_admin‘,p=‘MANAGER‘

同步完后重新验证

[[email protected] ~]#/usr/local/bin/pt-table-checksum h=‘192.168.1.250‘,u=‘checksums‘,p=‘MANAGER‘,P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
[[email protected] ~]# /usr/local/bin/pt-table-checksum h=‘192.168.1.250‘,u=‘checksums‘,p=‘MANAGER‘,P=3306 -d erp --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format

可以发现checksums表已经没有不同步的表了

mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
Empty set (0.03 sec)

至此主从校验、同步完成

时间: 2024-11-03 01:30:48

MySQL主从同步校验与重新同步的相关文章

mysql主从一致性校验工具-pt

一.环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 MasterIP master 数据库:主 177  centos6.7 SlaveIP slave 数据库:从 148 2.软件环境 软件 版本 安装方式 说明 pt工具 3.0.4 编译安装 这是一个综合工具包,包含很多pt命令 mysql数据库 5.6.37 yum安装 主从环境 3.需要用到库 库名 表名 用途  percona checksums 存储pt命令监测的结果,第一次执行检测命令时会自己

mysql主从数据一致性校验及纠错工具

目录 1.概述 2.percona-tooldit工具的安装 3.新建用户 4.pt-table-checksum使用 5.pt-table-sync使用 6.个人总结 1.概述 假如你是一位运维人员,假如你生产环境上部署了mysql系统,再假如你线上的mysql是基于主从复制的架构,那恭喜你,它将可能会带给你主从数据不一致的"恶运". 由于mysql复制架构原生特性,主从服务器上的数据不可能做"同步"复制,所以延时是必然会有的,即使是不那么繁忙的服务器上,在业务不

mysql主从中异步和半同步的区别

MySQL主从复制,默认是异步复制.异步复制,即master执行完事物并提交后,二进制日志记录完这些更新操作后,就又开始下一批事物.并不关心这些更新是否被复制到从上. 而半同步复制则相反,它需要等待至少一台mysql的从服务器接收到master的二进制日志后,才开始执行下一批事物.在这个等待过程中,如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续.这时,主库就会变回原来的异步状态. 当MySQL在加载并开启S

基于pt-table-checksum和pt-table-sync实现MySQL主从数据一致性校验

在基于MySQL逻辑复制原理的下的主从架构,经常会由于某些缘故产生主从数据不一致,从而导致主从复制进程报错中断.而基于定期去检查从库的show slave status\G的IO线程和SQL线程的状态,只能确认当前replication是正常的,却无法确认当前主从数据是否一致.幸好percona公司提供pt工具包,其中的pt-table-checksum和pt-table-sync相互配合,在基于一定的前提条件下,可以较好的完成主从数据一致性校验和修复,而不会较大程度上影响线上数据库的性能. p

利用Python监测MySQL主从状态

探测MySQL主从状态,如果从未同步,则发邮件通知运维人员.利用定时任务秒级监测! # -*- coding: utf-8 -* #! /usr/bin/env python from fabric.api import * from fabric.colors import * from fabric.context_managers import * from fabric.contrib.console import confirm import string import smtplib

Mysql主从不同步问题处理

由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:binlog或者relay log数据损坏 数据不同步给应用带来的危害是致命的,当出现主从数据不一致的情况,常见的应对方法是先把从库下线,然后找个半夜三更的时间把应用停掉,重新执行同步,如果数据库的体积十分庞大,那工作量可想而知,会让人崩溃.本文介绍使用percona-toolkit工具对mysql主从

使用Percona Toolkit解决Mysql主从不同步问题【备忘】

由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:binlog或者relay log数据损坏 数据不同步给应用带来的危害是致命的,当出现主从数据不一致的情况,常见的应对方法是先把从库下线,然后找个半夜三更的时间把应用停掉,重新执行同步,如果数据库的体积十分庞大,那工作量可想而知,会让人崩溃.本文介绍使用percona-toolkit工具对mysql主从

mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有一些常规问题: 比如主库宕机或者从库宕机有可能会导致复制中断,通常需要进行人为修复, 或者很多时候需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样. 这种情况下就需要使用percona-toolkit工具的pt-table-checksum组件来检查主从数据的一致性:如果发现不一致的

mysql主从同步详细教程

例子: 假如我需要同步test1.test2数据库 系统:centos7 主库主机:192.168.1.252 从库主机:192.168.1.251 端口都是:3306 (1).打开主数据的配置文件my.cnf,添加这几项 (2).重启mysql (service mysql restart)(3).在主库创建一个用于同步的用户(当然也可以不创建,直接用已有的,不过为了安全建议还是创建一个) 这个slave用户密码为123456,但有同步的权限,且只能在192.168.1.253上连接. 如果主