mk-table-checksum检查主从表是否一致及有效的工具

具体介绍:http://tech.it168.com/a2011/0808/1229/000001229492_4.shtml

下面介绍安装和使用:

安装过程

[root@vm02]# mk-table-checksum h=localhost,u=root,p=123456 h=192.168.8.22,u=admin,p=123456 -d test -t t1
Cannot connect to MySQL because the Perl DBI module is not installed or not found.  Run 'perl -MDBI' to see the directories that Perl searches for DBI.  If DBI is not installed, try:
  Debian/Ubuntu  apt-get install libdbi-perl
  RHEL/CentOS    yum install perl-DBI
  OpenSolaris    pgk install pkg:/SUNWpmdbi
[root@vm02]#

提示缺少perl-DBI模块,那么直接 yum install perl-DBI。

主库master:192.168.8.23
从库slave:  192.168.8.22

我们在主库上运行:

[root@vm02 ~]# mk-table-checksum h=localhost,u=root,p=123456 h=192.168.8.22,u=admin,p=123456 -d test
DATABASE TABLE     CHUNK HOST         ENGINE      COUNT         CHECKSUM TIME WAIT STAT  LAG
test     heartbeat     0 localhost    MyISAM       NULL       3775992158    0    0 NULL NULL
test     heartbeat     0 192.168.8.22 MyISAM       NULL       4070270504    0    0 NULL NULL
test     t1            0 localhost    InnoDB       NULL       1245381782    0    0 NULL NULL
test     t1            0 192.168.8.22 InnoDB       NULL       1906296014    0    0 NULL NULL
test     t2            0 localhost    InnoDB       NULL        251493421    0    0 NULL NULL
test     t2            0 192.168.8.22 InnoDB       NULL        251493421    0    0 NULL NULL
[root@vm02 ~]#

如果表不一致,CHECKSUM的值是不相等的。

解释下输出的意思:

DATABASE:数据库名
TABLE:表名
CHUNK:checksum时的近似数值
HOST:MYSQL的地址
ENGINE:表引擎
COUNT:表的行数
CHECKSUM:校验值
TIME:所用时间
WAIT:等待时间
STAT:MASTER_POS_WAIT()返回值
LAG:slave的延时时间


如果你想过滤出不相等的都有哪些表,可以用mk-checksum-filter这个工具。

只要在后面加个管道符就行了。

[root@vm02 ~]# mk-table-checksum h=localhost,u=root,p=123456 h=192.168.8.22,u=admin,p=123456 -d test | mk-checksum-filter
test     heartbeat     0 192.168.8.22 MyISAM       NULL       1566188174    0    0 NULL NULL
test     heartbeat     0 localhost    MyISAM       NULL       1271909828    0    0 NULL NULL
test     t1            0 192.168.8.22 InnoDB       NULL       1906296014    0    0 NULL NULL
test     t1            0 localhost    InnoDB       NULL       1245381782    0    0 NULL NULL
[root@vm02 ~]#

知道有哪些表不一致,那么我们就可以处理了。

可以用mk-table-sync这个工具来处理。

注:在执行mk-table-checksum时会锁表,表的大小取决于执行的快慢。