MySQL主从同步校验与重新同步
主從復(fù)制環(huán)境中,可能有種種原因?qū)е轮鳌膸?kù)數(shù)據(jù)不一致的情況,主從一致性也一直是DBA需要關(guān)注的問(wèn)題,校驗(yàn)MySQL的主從一致性一般有多種工具,諸如MySQL自帶的checksum、mysqldiff、pt-table-checksum等,每種工具各有優(yōu)缺,本文就pt-table-checksum工具進(jìn)行介紹和記錄實(shí)驗(yàn)環(huán)節(jié)。
?
下載二進(jìn)制版本的percona-toolkit工具箱
https://www.percona.com/downloads/percona-toolkit
本文用的是2.2.18版本
[root@HE3 ~]# tar xvf percona-toolkit-2.2.18.tar.gz
[root@HE3 ~]# cd percona-toolkit-2.2.18
[root@HE3 percona-toolkit-2.2.18]# perl Makefile.PL
[root@HE3 percona-toolkit-2.2.18]# make && make install
?
?
主庫(kù)創(chuàng)建checksums用戶(hù)用于校驗(yàn)主從是否一致
mysql>GRANT?SELECT,?PROCESS,?SUPER,?REPLICATION?SLAVE?ON?*.*?TO?'checksums'@'%'?IDENTIFIED?BY?'MANAGER';開(kāi)始執(zhí)行校驗(yàn),在校驗(yàn)結(jié)束后,會(huì)在test庫(kù)下創(chuàng)建表名為checksums的表用于存儲(chǔ)主從一致性信息
[root@HE3?~]#/usr/local/bin/pt-table-checksum?h='192.168.1.250',u='checksums',p='MANAGER',P=3306?-d?www?--nocheck-replication-filters?--replicate=test.checksums?--no-check-binlog-format?
從庫(kù)可以執(zhí)行本條SQL來(lái)查看哪些表有主從不一致的情況,此時(shí)主從是一致的所以沒(méi)有結(jié)果
mysql>?SELECT?db,tbl,?SUM(this_cnt)?AS?total_rows,?COUNT(*)?AS?chunks?FROM?test.checksums?WHERE?(?master_cnt?<>?this_cnt?OR?master_crc?<>?this_crc?OR?ISNULL(master_crc)?<>?ISNULL(this_crc))?GROUP?BY?db,?tbl; Empty?set?(0.03?sec)?
我們先刪除www庫(kù)下的某張表的某一行
?
?
再次運(yùn)行同步校驗(yàn)
[root@HE3?~]#/usr/local/bin/pt-table-checksum?h='192.168.1.250',u='checksums',p='MANAGER',P=3306?-d?www?--nocheck-replication-filters?--replicate=test.checksums?--no-check-binlog-format?
可以發(fā)現(xiàn)在從庫(kù)上執(zhí)行本條SQL可以看到主從不一致的表名
mysql>?SELECT?db,tbl,?SUM(this_cnt)?AS?total_rows,?COUNT(*)?AS?chunks?FROM?test.checksums?WHERE(?master_cnt?<>?this_cnt?OR?master_crc?<>?this_crc?OR?ISNULL(master_crc)?<>?ISNULL(this_crc))?GROUP?BY?db,?tbl; +-----+----------------+------------+--------+ |?db??|?tbl????????????|?total_rows?|?chunks?| +-----+----------------+------------+--------+ |?www?| decorate_order?|??????25356?|??????1?| +-----+----------------+------------+--------+ 1?row?in?set?(0.00sec)?
?
同理我們刪掉erp庫(kù)下的某張表的某一行
[SQL]delete?from?erp_mard?id=104; 受影響的行:?1 時(shí)間:?0.002s?
?
再次運(yùn)行同步校驗(yàn)
[root@HE3?~]#/usr/local/bin/pt-table-checksum?h='192.168.1.250',u='checksums',p='MANAGER',P=3306?-d?www?--nocheck-replication-filters?--replicate=test.checksums?--no-check-binlog-format?
?
可以發(fā)現(xiàn)剛剛刪除的erp_mard表已經(jīng)進(jìn)入到了我們的主從不一致記錄表里
mysql>?SELECT?db,tbl,?SUM(this_cnt)?AS?total_rows,?COUNT(*)?AS?chunks?FROM?test.checksums?WHERE?(?master_cnt?<>?this_cnt?OR?master_crc?<>?this_crc?OR?ISNULL(master_crc)?<>?ISNULL(this_crc))?GROUP?BY?db,?tbl; +-----+----------------+------------+--------+ |?db??|?tbl????????????|?total_rows?|?chunks?| +-----+----------------+------------+--------+ |?erp?| erp_mard???????|??????11183?|??????1?| |?www?| decorate_order?|??????25356?|??????1?| +-----+----------------+------------+--------+ 2?rows?in?set?(0.02sec)?
?
我們?cè)谥鲙?kù)執(zhí)行pt-table-sync命令來(lái)進(jìn)行重新同步(請(qǐng)做好備份,重要的話(huà)說(shuō)三遍,備份備份備份)
同步完后重新驗(yàn)證
[root@HE3?~]#/usr/local/bin/pt-table-checksum?h='192.168.1.250',u='checksums',p='MANAGER',P=3306?-d?www?--nocheck-replication-filters?--replicate=test.checksums?--no-check-binlog-format [root@HE3?~]#?/usr/local/bin/pt-table-checksum?h='192.168.1.250',u='checksums',p='MANAGER',P=3306?-d?erp?--nocheck-replication-filters?--replicate=test.checksums?--no-check-binlog-format?
可以發(fā)現(xiàn)checksums表已經(jīng)沒(méi)有不同步的表了
mysql>?SELECT?db,tbl,?SUM(this_cnt)?AS?total_rows,?COUNT(*)?AS?chunks?FROM?test.checksums?WHERE?(?master_cnt?<>?this_cnt?OR?master_crc?<>?this_crc?OR?ISNULL(master_crc)?<>?ISNULL(this_crc))?GROUP?BY?db,?tbl; Empty?set?(0.03?sec)?
?
至此主從校驗(yàn)、同步完成
?
pt-table-checksum,pt-table-sync這兩個(gè)工具還有很多重要的特性和參數(shù),這里僅做實(shí)驗(yàn)用,具體的生產(chǎn)還需要哪些參數(shù),比如只同步某張表等以后會(huì)繼續(xù)深入研究
?
?
總結(jié)
以上是生活随笔為你收集整理的MySQL主从同步校验与重新同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 11-swift中的函数
 - 下一篇: 【POJ 2942】Knights of