如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了:mysql> SHOW SLAVE STATUS\G
Last_Error: Error 'Duplicate entry '...' for key ...' on query.
为啥会出现唯一索引键值重复?最大的可能是错误的对从服务器做了写操作!出现此类错误的时候,很多人会用sql_slave_skip_counter操作跳过错误,甚至有人写了脚本,如果有多个错误,就循环多次执行sql_slave_skip_counter:mysql> SET GLOBAL sql_slave_skip_counter = 1;
mysql> START SLAVE;
可惜,即便sql_slave_skip_counter操作能够暂时让主从恢复工作,但多半数据一致性已经被破坏的更严重了,早晚有一天被掩盖的问题会再次爆发出来。
Percona Toolkit里的pt-table-checksum和pt-table-sync可以搞定此类问题。它们的安装很简单,可以依照自己的操作系统选择下载rpm或者deb软件包来安装,当然也可以使用源代码来安装,不过要注意的是,必须确保系统已经安装了依赖的Perl软件包:shell> perl -MCPAN -e 'install DBI'
shell> perl -MCPAN -e 'install DBD::mysql'
shell> perl -MCPAN -e 'install Term::ReadKey'
顺便说一下,我在安装某些Perl模块的时候,出现类似下面的错误提示&#x