复制数据一致性校验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复制数据一致性校验相关的知识,希望对你有一定的参考价值。
复制数据一致性校验
借鉴:https://segmentfault.com/a/1190000004309169
mysql学习:http://www.itdks.com/dakashuo/playback/267
怎么保证数据复制一致
半同步(5.7 loss zero replication)
异步类的复制:
1、要安装规范来
2、要敏锐的观察力
3、对于异常切换要有数据验证机制(使用GTID)
记账类数据:对比工具
pt-table-checksum使用
percona-tools里的一个工具,用来校验主从数据是否一致。
percona-xtradb-cluster
(1)pt-table-checksum工作原理分析:
master/salve打开general_log ;分析后要关闭
show processlist;
set global genernal_log=1;打开
观察后
。。。。
set global genernal_log=0;关闭
(2)环境
master:node1 3306
slave: node2 3306
GTID
pt-table-checksum --help
官方参照文档:perldoc /usr/bin/pt-table-checksum
pt-table-checksum输出格式:
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
10-20T08:36:50 0 0 200 1 0 0.005 db1.tbl1
10-20T08:36:50 0 0 603 7 0 0.035 db1.tbl2
10-20T08:36:50 0 0 16 1 0 0.003 db2.tbl3
10-20T08:36:50 0 0 600 6 0 0.024 db2.tbl4
TS:去掉年的时间
ERRORS:发生错误的次数
DIFFS:发了几个chunk里的数据不一致(默认1000条记录)
ROWS:表里的总长度
CHUNKS:表拆分了多少份来对比
SKIPPED:发生错误跳过的
TIME:检查占用的时间
TABLE:对应的表名
(3)基本使用:主库执行(#主库和从库的端口号要一致)
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --recursion-method="processlist"
#pt-table-checksum --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --recursion-method="processlist"
#报错error
#只检查test这个库
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --databases=test --recursion-method="processlist"
#检查test,test2这个库,逗号分开
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --databases=test,test2 --recursion-method="processlist"
具体用法可以grep来过滤查看命令
pt-table-checksum --help | grep ignore
###显示不一致的用--replicate-check-only
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --ignore-databases=mysql --replicate-check-only --recursion-method="processlist"
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --databases=wu --replicate-check-only --recursion-method="processlist"
METHOD USES
=========== =============================================
processlist SHOW PROCESSLIST
hosts SHOW SLAVE HOSTS
cluster SHOW STATUS LIKE ‘wsrep\_incoming\_addresses‘
dsn=DSN DSNs from a table
none Do not find slaves
DSN: "h=replica_host,u=repl_user,p=repl_pass".
(4)pt-table-sync使用
看一下:
pt-table-sync --replicate=db1.checksums h=192.168.0.100,u=repl,p=repl4slave --print
修复数据:
pt-table-sync --replicate=db1.checksums h=192.168.0.100,u=repl,p=repl4slave --execute
在看一下数据是否一致
pt-table-checksum --no-check-binlog-format --replicate=db1.checksums -h 192.168.0.100 -P 3306 -u repl -p repl4slave --ignore-databases=mysql --replicate-check-only --recursion-method="processlist"
(5)备注
#############################################################################################################
CREATE DATABASE IF NOT EXISTS db1;
CREATE TABLE IF NOT EXISTS db1.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;
授权
GRANT ALL PRIVILEGES on *.* to ‘repl‘@‘192.168.0.%‘ ;
GRANT SELECT,LOCK TABLES,PROCESS,SUPER on *.* to ‘repl‘@‘192.168.0.%‘ ;
telnet 192.168.0.101 3306
CREATE TABLE `t1` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`uid`)
)
本文出自 “梁小明的博客” 博客,请务必保留此出处http://7038006.blog.51cto.com/7028006/1893631
以上是关于复制数据一致性校验的主要内容,如果未能解决你的问题,请参考以下文章