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时会锁表,表的大小取决于执行的快慢。
具体介绍: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时会锁表,表的大小取决于执行的快慢。
本文转自 liang3391 51CTO博客,原文链接:http://blog.51cto.com/liang3391/735498