当使用MySQL主从服务器时。一个必须考虑的问题就是要有方法检测数据是否已经出现了不一致,幸好mk-table-checksum提供了这样的功能:
先安装依赖的模块:DBI,DBD::mysql(相关链接):
perl -MCPAN -e 'install DBI'
perl -MCPAN -e
'install DBD::mysql'
如果自动安装不好使,就手动下载安装,地址:http://search.cpan.org/
再安装Maatkit软件包,基本步骤很简单:
tar
zxvf maatkit-3519.tar.gz
cd
maatkit-3519
剩下的就是Perl软件安装的固定打法:
perl Makefile.PL
make
make
install
下面进入正题,看看如何核对主从服务器的数据一致性,操作都在主服务器上完成,所以是localhost:
mk-table-checksum
--createreplicate --replicate=test.checksum
localhost
需
要说明的是test.checksum表示的是test数据库的checksum数据表(也可以使用别的数据库或数据表,只要保证它在主从服务器间没被忽
略复制即可),有了createreplicate参数,系统会自动创建这个表,里面会保存一些核对数据,手册里还有很多其他的参数可以使用,恕不详述。
命令执行速度的快慢要视数据量的大小而定,执行完之后,就可以用下面的命令来查询是否存在不一致:
mk-table-checksum
--replicate=test.checksum --replcheck 1
localhost
其实就是查询test.checksum表里this_crc != master_crc的行,所以你也可以不用上面的命令而是手动查找。
需要说明的是replcheck参数指明了核对的级联深度,比如1表示此服务器和它的从服务器。
至于如何同步不一致的数据,可以使用Maatkit提供的另一个软件:mk-table-sync:
mk-table-sync --execute --replicate
test.checksum
localhost
注意:如果你用的MySQL不支持触发器语法的话,记得在上面的命令里加上--ignore-triggers参数。
提示:虽然我们的操作都是在主服务器上完成的,但是mk能通过两个途径来自动找到从服务器,一个是SHOW
PROCESSLIST,另一个是SHOW SLAVE HOSTS(不过这个方法要求在从服务器上设定report-host等参数)
补充链接:OnlineDataDrift是Google针对mk-table-checksum的一个优化版本,可以看看。
BTW:ICC版二进制MySQL环境下DBD::mysql安装问题。
所谓ICC指的是Intel
C/C++ compiled,据说MySQL的ICC编译版本比一般的GCC编译版本效率要好一些。
不过如果采用ICC版本的话,在安装DBD::mysql时一不留神可能会遇到一些小问题,比如:
undefined
symbol:
_intel_fast_memcpy
究其原因,是因为MySQL是用ICC编译的,而缺省安装DBD::mysql时,使用的是GCC,所以出现未定义符号也是在所难免的事儿,解决方法是下载ICC库,解压缩安装到/usr/local/lib/icc目录。
tar zxvf
DBD-mysql-4.011.tar.gz
cd DBD-mysql-4.011
然后使用ICC参数手动安装DBD::mysql:
perl Makefile.PL
\
--cflags='-I/usr/local/mysql/include' \
--libs='-L/usr/local/mysql/lib
-lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/local/lib/icc
-lirc'
make
make install
和正常的编译参数相比,其实就是多了“-L/usr/local/icc
-lirc”而已,这样就OK了。