登录主库,创建用于保存检查信息的库pt和表checksums(从库可以自动复制)。
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
create database pt; show databases; use pt; create table checksums( db CHAR(64) NOT NULL, tbl CHAR(64) NOT NULL, chunk INT NOT NULL, chunk_time FLOAT NULL, chunk_index VARCHAR(200) NULL, lower_boundary TEXT NULL, upper_boundary TEXT NULL, this_crc CHAR(40) NOT NULL, this_cnt INT NOT NULL, master_crc CHAR(40) NULL, master_cnt INT NULL, ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db, tbl, chunk), INDEX ts_db_tbl (ts, db, tbl) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; show tables; |
1 2 3 4 5 |
create user 'checksums'@'%' identified by '123456'; grant select,process,super,replication slave on *.* to 'checksums'@'%'; grant all on pt.* to 'checksums'@'%'; flush privileges; select user,host from mysql.user; |
show grants for checksums; select * from mysql.user where user='checksums' \G;
1
|
pt-table-checksum h=192.168.220.58,u=checksums,p=123456,P=3306 --databases=tpcc --no-check-binlog-format --replicate=pt.checksums --max-lag=3 --recursion-method=hosts |
1
|
pt-table-checksum h=192.168.220.58,u=checksums,p=123456,P=3306 --databases=tpcc --tables=bmsql_district --no-check-binlog-format --replicate=pt.checksums --max-lag=3 --recursion-method=hosts |
如果客户端执行一致性校验报错“Cannot connect to P=3307,h=,p=...,u=checksums.Diffs cannot be detected because no slaves were found”,参考no slaves were found解决后,重新登录客户端执行一致性校验。
参数项 |
说明 |
---|---|
h=192.168.220.58 |
主库的IP地址。 |
u=checksums |
用户名。 |
p=123456 |
密码。 |
P=3306 |
数据库端口。 |
--databases |
指定需要被检查的数据库,多个则用逗号隔开。 |
--tables |
指定需要被检查的表,多个用逗号隔开。 |
--no-check-binlog-format |
不检查主从复制的binlog模式。如果binlog模式是row模式,需要启用该参数。 |
--replicate=pt.checksums |
把检查信息都写到了checksums表中。 |
--max-lag=3 |
如果发现延迟最大的从库延迟超过max-lag秒,pt-table-checksum工具在这里将暂停。 |
--nocheck-replication-filters |
表示不需要检查主库配置里是否指定了Filter。 |
--replicate-check-only |
只显示主从不一致的信息,如果主从一致就不会有信息显示。 |
参数项 |
说明 |
---|---|
TS |
完成检查的时间。 |
ERRORS |
检查时候发生错误和警告的数量。 |
DIFFS |
0表示一致,1表示不一致。 |
ROWS |
表的行数。 |
CHUNKS |
被划分到表中的块的数目。 |
SKIPPED |
由于错误或警告或过大,则跳过块的数目。 |
TIME |
执行的时间。 |
TABLE |
被检查的表名。 |
1
|
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysql.sock |
分别查看主库和从库的检查信息。
1
|
select * from pt.checksums; |
分别查看主库和从库的检查结果。
1
|
select * from pt.checksums where master_cnt <> this_cnt or master_crc <> this_crc or isnull(master_crc) <> isnull(this_crc); |
如果结果为空说明主库和从库数据一致,否则说明主库和从库数据不一致。