pt-table-checksum使用说明
来源:互联网 发布:java怎么上传文件 编辑:程序博客网 时间:2024/05/18 00:06
功能:
pt-table-checksum是一个在线验证主从数据一致性的工具,主要用于以下场景:
- 数据迁移前后,进行数据一致性检查
- 当主从复制出现问题,待修复完成后,对主从数据进行一致性检查
- 把从库当成主库,进行数据更新,产生了"脏数据"
- 定期校验
原理说明:
pt-table-checksum 在主上执行检查语句在线检查 mysql 复制的一致性,生成 replace 语句,然后通过复制传递到从,再通过update 更新 master_src 的值。 通过检测从上 this_src 和 master_src 的值从而判断复制是否一致。
注意: 使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定。
使用--max-load 来指定最大的负载情况,如果达到那个负载这个暂停运行。如果发现有不一致的数据,可以使用pt-table-sync 工具来修复。
注意: 和 1.0 版本不同,新版本的 pt-table-checksum 只需要在 master上执行即可。
通过 –explain 参数再结合二进制日志就可以看出脚本的工作原理,如我的 test 库有一个名字为 zhang 的表,我们通过抓取二进制日志来 查看脚本的原理:
REPLACE INTO `test`.`checksums` (db, tbl, chunk, chunk_index, lowe
r_boundary, upper_boundary, this_cnt, this_crc)
SELECT 'test', 'zhan
g', '1', NULL, NULL, NULL, COUNT(*) AS cnt, COALESCE(LOWER(CON
V(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `id`, `name`, CONCAT(ISNULL
(`name`)))) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `test`.`zhang`
/*checksum table*/;
UPDATE `test`.`checksums` SET chunk_time = '0.000563', master_crc
= '31012777', master_cnt = '4' WHERE db = 'test' AND tbl = 'zha
ng' AND chunk = '1'
从这里可以很明显的看出原理了,前面已经说了,这里就不赘述了。
执行:在主库上执行
使用示例
相关参数说明:
参数
说明
--nocheck-replication
忽略replication-do-db规则
--no-check-binlog-format不检查复制的binlog模式,要是binlog模式是ROW,则会报错。--replicate
选择哪个库下创建checksums表,并将数据写入到表中 --ignore-tables
忽略某张表--replicate-check-only
结果只显示数据不一致的表--create-replicate-table
首次运行时需要添加,创建checksum表,若不指定需要手动创建表,语句见附
附:
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,
PRIMARY KEY (db, tbl, chunk),
INDEX ts_db_tbl (ts, db, tbl)
) ENGINE=InnoDB;
显示说明:
字段
说明
TS
完成检查的时间
ERRORS
检查时候发生错误和警告的数量
DIFFS
0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS
表的行数。
CHUNKS
被划分到表中的块的数目
SKIPPED
由于错误或警告或过大,则跳过块的数目。
TIME
执行的时间
TABLE
被检查的表名。
示例一:比较两个数据库同步是否一致
pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --host=192.168.153.132 --user=admin --password=123456 --port=3306 --no-check-binlog-format
说明:使用这个命令可以对比两个库中哪些表的数据不一致,如果DIFFS为非0,则表示两表的数据不致。
示例二:比较两个库是否同步,结果只显示数据不一致的表。
pt-table-checksum --nocheck-replication-filters --databases=test --replicate=test.checksums --host=192.168.153.132 --user=admin --password=123456 --port=3306 --no-check-binlog-format --replicate-check-only
0 0
- pt-table-checksum使用说明
- pt-table-checksum 中文使用说明
- pt-table-checksum
- pt-table-checksum
- pt-table-checksum
- pt-table-checksum安装
- pt-table-checksum 使用方法
- pt-table-checksum使用实践
- pt-table-checksum使用实践
- Pt-table-checksum原理浅析
- pt-table-sync使用说明
- pt-table-checksum和pt-table-sync使用方法详解
- percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明
- percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明
- pt-table-checksum和pt-table-sync用法
- 验证MySQL主从一致性(pt-table-checksum&pt-table-sync)
- percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明
- 浅析pt-table-checksum和pt-table-sync原理
- 【java】以词频升序统计文本词频
- tomcate的启动日志
- Ubuntu 13.10 安装后配置
- Meanshift,聚类算法
- oracle内存
- pt-table-checksum使用说明
- JAVA概述(10) 函数(重载概述和联系)
- s2dao
- 使用POI读写EXCEL文件
- 【java】统计文本文件中词频,以字典序排序
- 数据结构--内部排序读书笔记
- _manifest.rc(1): error RC2135: file not found:。。。问题解决
- 【java】加权图的实现
- 【二维线段树】 HDU 1823 Luck and Love | HDU 4819 Mosaic