前面已经提到了mysql主从环境下数据一致性检查:mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
今天这里再介绍另一种Mysql数据一致性自动检测工具:Maatkit。(不过Maatkit工具现在已经不维护了,推荐还是使用percona-toolkit工具吧!)
Maatkit是一个开源的工具包,为mySQL日常管理提供了帮助,它包含很多工具,这里主要说下面两个:
1)mk-table-checksum 用来检测master和slave上的表结构和数据是否一致的;
2)mk-table-sync 在主从数据不一致时,用来修复数据的;先主后从有效保证表一致的工具,不必重载从表而能够保证一致。
上面两个perl脚本在运行时都会锁表,表的大小取决于执行的快慢,勿在高峰期间运行,可选择凌晨。
-----------------------------------------------------------------------------------------------------
下面记录了这一操作过程:
基本信息:
master:192.168.1.101
slave:192.168.1.102
版本:mysql5.6
同步的库:huanqiu、huanpc
Maatkit安装过程:(主库和从库服务器上都可以安装,因为数据一致性检查操作在主库或从库机器上都可以运行;建议主从机器上都安装)
1)安装该工具依赖的软件包
[root@master-server src]# yum install perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl perl-DBI -y
vbi1)
[root@master-server ~]# tar -zvxf maatkit-7540.tar.gz && cd maatkit-7540
[root@master-server maatkit-7540]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for maatkit
------------------------------------------------------------------------------------------------------------
如有报错:
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
解决办法:
[root@slave-server maatkit-4334]# yum install perl-ExtUtils-Embed perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
------------------------------------------------------------------------------------------------------------
[root@master-server maatkit-4334]# make && make install
[root@master-server ~]# mk- //按TAB键补全,可以查看到Maatkit的所有命令
mk-archiver mk-find mk-parallel-dump mk-show-grants mk-table-sync
mk-checksum-filter mk-heartbeat mk-parallel-restore mk-slave-delay mk-table-usage
mk-config-diff mk-index-usage mk-profile-compact mk-slave-find mk-tcp-model
mk-deadlock-logger mk-kill mk-purge-logs mk-slave-move mk-upgrade
mk-duplicate-key-checker mk-loadavg mk-query-advisor mk-slave-prefetch mk-variable-advisor
mk-error-log mk-log-player mk-query-digest mk-slave-restart mk-visual-explain
mk-fifo-split mk-merge-mqd-results mk-query-profiler mk-table-checksum
安装完成后,一定要在被校验的主从服务器上创建只有SELECT权限的帐号(最好保持主从上创建的账号和密码一样,方便操作)
mysql> GRANT SELECT ON *.* TO 'data_check'@'%' IDENTIFIED BY 'check@123';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
使用mk-table-checksum检查主从数据一致性
1)在主库服务器上运行数据一致性检查操作(也可以在从库服务器上进行数据一致性检查操作,命令跟下面一样)
[root@master-server ~]# mk-table-checksum h=192.168.1.101,u=data_check,p=check@123,P=3306 h=192.168.1.102,u=data_check,p=check@123,P=3306
DATABASE TABLE CHUNK HOST ENGINE COUNT CHECKSUM TIME WAIT STAT LAG
mysql columns_priv 0 192.168.1.101 MyISAM NULL 0 0 0 NULL NULL
mysql columns_priv 0 192.168.1.102 MyISAM NULL 0 0 0 NULL NULL
mysql db 0 192.168.1.101 MyISAM NULL 4197331717 0 0 NULL NULL
mysql db 0 192.168.1.102 MyISAM NULL 4197331717 0 0 NULL NULL
mysql event 0 192.168.1.101 MyISAM NULL 0 0 0 NULL NULL
mysql event 0 192.168.1.102 MyISAM NULL 0 0 0 NULL NULL
mysql func 0 192.168.1.101 MyISAM NULL 0 0 0 NULL NULL
mysql func 0 192.168.1.102 MyISAM NULL 0 0 0 NULL NULL
mysql general_log 0 192.168.1.101 CSV NULL 0 0 0 NULL NULL
mysql general_log 0 192.168.1.102 CSV NULL 0 0 0 NULL NULL
mysql help_category 0 192.168.1.101 MyISAM NULL 2621154011 0 0 NULL NULL
mysql help_category 0 192.168.1.102 MyISAM NULL 2621154011 0 0 NULL NULL
mysql help_keyword 0 192.168.1.101 MyISAM NULL 2791798352 0 0 NULL NULL
mysql help_keyword 0 192.168.1.102 MyISAM NULL 578891347 0 0 NULL NULL
mysql help_relation 0 192.168.1.101 MyISAM NULL 3733405838 0 0 NULL NULL
mysql help_relation 0 192.168.1.102 MyISAM NULL 1649042165 0 0 NULL NULL
mysql help_topic 0 192.168.1.101 MyISAM NULL 1795841156 0 0 NULL NULL
mysql help_topic 0 192.168.1.102 MyISAM NULL 2642710534 0 0 NULL NULL
mysql innodb_index_stats 0 192.168.1.101 InnoDB