percona之pt-table-checksum介绍

功能介绍:

检查mysql复制一致性

工作原理:

通过在主服务器上运行pt-table-checksum,它会通过一系列的MySQL函数计算每个表的散列值,利用主从复制关系,把同样的计算过程在从服务器上重放,从而就拿到了主从服务器各自的散列值,只要比较散列值是否相同就OK了。

注意:使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定。使用--max-load来指定最大的负载情况,如果达到那个负载这个暂停运行。如果发现有不一致的数据,可以使用pt-table-sync工具来修复。

使用说明

shell> pt-table-checksum [OPTIONS] [DSN]
详情可参考
shell> pt-table-checksum --help

常用参数:
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式。
--replicate-check-only :只显示不同步的信息。
--replicate= :指定checksum的信息写入的表。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
--chunk-size=z: 指定每个校验查询的行数,默认为1000
 --function=s :指定校验的哈希函数(FNV1A_64,MURMUR_HASH, SHA1, MD5, CRC32, etc)

安装使用

主从配置一致
shell> tar -zxvf percona-toolkit-2.2.9.tar.gz 
shell> perl Makefile.PL
shell> make && make install

[master]
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'svoid'@'localhost' IDENTIFIED BY '123qwe';

shell> pt-table-checksum h='127.0.0.1',u='svoid',p='123qwe',P=3306 -d db_test --nocheck-replication-filters
--replicate=test.checksums --no-check-binlog-format

# 2 software updates are available:
#   * The current version for MySQL Community Server (GPL) is 5.5.40.
#   * The current version for Percona::Toolkit is 2.2.11.

            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
01-07T17:37:22      0      0        0       1       0   0.005 test.bookinfo
01-07T17:37:24      0      1   147378       4       0   1.581 test.t
01-07T17:37:24      0      0     1762       1       0   0.258 test.user

TS          :完成检查的时间。
ERRORS      :检查时候发生错误和警告的数量。
DIFFS       :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only只显示数据不一致的信息。
ROWS        :表的行数。
CHUNKS      :被划分到表中的块的数目。
SKIPPED     :由于错误或警告或过大,则跳过块的数目。
TIME        :执行的时间。
TABLE       :被检查的表名。


mysql> select * from checksums limit 1 \G;
*************************** 1. row ***************************
            db: test   
           tbl: bookinfo
         chunk: 1
    chunk_time: 0.005444
   chunk_index: NULL
lower_boundary: NULL
upper_boundary: NULL
      this_crc: 2d51c233                  #从库         
      this_cnt: 1                         #从库
    master_crc: 2d51c233                  #主库
    master_cnt: 1                         #主库
            ts: 2015-01-07 17:37:22
1 row in set (0.00 sec)
主从配置不一致
mysql> CREATE TABLE `dsns` (
     >  `id` int(11) NOT NULL AUTO_INCREMENT, 
     >  `parent_id` int(11) DEFAULT NULL, 
     >  `dsn` varchar(255) NOT NULL,
     >   PRIMARY KEY (`id`) );
Query OK, 0 rows affected (0.06 sec)

# 写入从库信息,可指定多条
mysql> INSERT INTO dsns (parent_id,dsn) values(1, "h=192.168.1.251,u=root,p=oracle,P=3308"); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from test.dsns;
+----+-----------+-------------------------------------+
| id | parent_id | dsn                                 |
+----+-----------+-------------------------------------+
|  1 |         1 | h=192.168.1.251,u=svoid,p=123qwe,P=3308 |
+----+-----------+-------------------------------------+
1 row in set (0.00 sec)

# 运行pt-table-checksum
shell> pt-table-checksum h='127.0.0.1',u='svoid',p='123qwe',P=3307 -d bbb,book --nocheck-replication-filters 
--replicate=test.checksums --recursion-method=dsn=h=192.168.1.251,D=test,t=dsns
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
01-08T01:22:46      0      1        4       1       0   0.074 bbb.eq
01-08T01:22:46      0      1        4       1       0   0.021 bbb.eqs
01-08T01:22:46      0      1        4       1       0   0.016 bbb.mas
01-08T01:22:46      0      1        4       1       0   0.013 bbb.sla
01-08T01:22:46      0      1        3       1       0   0.012 bbb.t
01-08T01:22:46      0      0        3       1       0   0.013 book.bookinfo
01-08T01:22:46      0      0        0       1       0   0.014 book.test_memory

# 统计主从不一致的表
从库运行
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 |
+-----------+------------+------------+--------+
| bbb       | eq         |          4 |      1 |
| bbb       | eqs        |          4 |      1 |
| bbb       | mas        |          4 |      1 |
| bbb       | sla        |          4 |      1 |
| bbb       | t          |          3 |      1 |
+-----------+------------+------------+--------+
5 rows in set (0.01 sec)

整理自网络

Svoid
2015-01-08

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29733787/viewspace-1466197/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29733787/viewspace-1466197/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值