验证MySQL主从一致性 pt-table-checksumpt-table-sync
发布时间:2022-03-30 11:03:59 所属栏目:搜索优化 来源:互联网
导读:percona-toolkit-2.2.8-1.noarch.rpm有两个工具可以验证MySQL主从数据的一致性 安装tookkit需要一些依赖包 yum install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes -y 实验环境 在Master上初始化实验数据 create database mvbox; use
percona-toolkit-2.2.8-1.noarch.rpm有两个工具可以验证MySQL主从数据的一致性 安装tookkit需要一些依赖包 yum install perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes -y 实验环境 在Master上初始化实验数据 create database mvbox; use mvbox; create table test(id int primary key,name varchar(20)); insert into test values(1,'a'),(2,'b'),(3,'c'),(4,'d'); 因为主从环境已经搭建,这些数据会自动同步到Slave上。 在Slave从库添加一个数据,模拟主从数据不一致的场景。 insert into test values(5,'e'); 在Master主库执行pt-table-checksum命令。 因为主从环境,这个数据会复制到Slave 也就是说Slave的percona.checksums表,存放的是主库数据的校验码。 所以在Slave对数据执行同样的校验,然后比对checksums表中的数据,就可以验证主从是否一致。 所以执行pt-table-checksum命令的帐号,至少需要有全库的只读权限和percona库的读写权限。 create user xx; GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO'xx'@'%' IDENTIFIED BY 'xx'; grant all privileges on percona.* TO'xx'@'%' IDENTIFIED BY 'xx'; 查看主从一致的情况 TS :完成检查的时间。 ERRORS :检查时候发生错误和警告的数量。 DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。 ROWS :表的行数。 CHUNKS :被划分到表中的块的数目。 SKIPPED :由于错误或警告或过大,则跳过块的数目。 TIME :执行的时间。 TABLE :被检查的表名。 常用参数 --nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。 --no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。 --replicate-check-only :只显示不同步的信息。 --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。 --databases= :指定需要被检查的数据库,多个则用逗号隔开。 --tables= :指定需要被检查的表,多个用逗号隔开 h=127.0.0.1 :Master的地址 u=root :用户名 p=123456:密码 P=3306 :端口 可以看到这个工具已经检测到了主从不一致的情况。 如果发生不一致,可以使用pt-table-sync命令修复。 需要注意的是这个命令需要在Slave从库执行。 使用print参数,他会在屏幕显示修复的SQL语句。然后可以手工确认并执行。 也可以通过这个命令自动执行,不过这样会修改从库的数据,感觉不是太安全。 需要特别注意的是这两个命令执行的过程中,会对表上共享锁,所以生产环境要慎重选择执行时间。 (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |