很多時候需要把一個從庫提升為主庫,但對從庫和主庫的數(shù)據(jù)一致性不敢保證,這時我們就可以利用 pt-table-checksum來檢查主庫數(shù)據(jù)的一致性,如果存在不一致的數(shù)據(jù),我們可以利用pt-table-sync來修復(fù)這些不一致的數(shù)據(jù)。
專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)張北免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
在主(master)上通過執(zhí)行校驗(yàn)的查詢對復(fù)制的一致性進(jìn)行檢查,對比主從的校驗(yàn)值,從而產(chǎn)生結(jié)果。
下面通過實(shí)際的例子來解釋該工具如何使用:
主庫(10.8.23.209)數(shù)據(jù):
從庫(10.8.23.208)數(shù)據(jù):
從庫(10.8.23.210)數(shù)據(jù):
很明顯主備數(shù)據(jù)不一致,我們使用工具來檢測下:
校驗(yàn)命令參數(shù)解釋:
校驗(yàn)結(jié)果字段解釋:
好了,命令以及常用參數(shù)都介紹了,一起解釋下上面執(zhí)行的效果,通過DIFFS 是1 就可以看出主從的表數(shù)據(jù)不一致。怎么不一致呢? 通過指定—replicate=test.checksums 參數(shù),就說明把檢查信息都寫到了checksums表中。
進(jìn)入備庫(10.8.23.208)中查看checksums表的信息:
進(jìn)入備庫(10.8.23.210)中查看checksums表的信息:
通過上面找到了這些不一致的數(shù)據(jù),如何修復(fù)呢?利用另外一個工具 pt-table-sync。
高效的同步MySQL表之間的數(shù)據(jù),他可以做單向和雙向同步的表數(shù)據(jù)。他可以同步單個表,也可以同步整個庫。它不同步表結(jié)構(gòu)、索引、或任何其他模式對象。所以在修復(fù)一致性之前需要保證他們表存在。接著上面的復(fù)制情況,主庫和從庫的aaa表數(shù)據(jù)不一致,需要修復(fù)。
參數(shù)解釋:
命令介紹完了,一起解釋下執(zhí)行的效果:通過(--print)打印出來了修復(fù)數(shù)據(jù)的sql語句,可以手動的去從行執(zhí)行,讓他們數(shù)據(jù)保持一致性。那能否直接執(zhí)行?當(dāng)然可以,通過(--execute)
沒發(fā)現(xiàn)任何異常,然后檢查主從數(shù)據(jù)的一致性:
主庫(10.8.23.209)數(shù)據(jù):
從庫(10.8.23.208)數(shù)據(jù):
從庫(10.8.23.210)數(shù)據(jù):
OK,數(shù)據(jù)已經(jīng)保持一致了。
不過建議還是--print 打印出來的好,這樣就可以知道那些數(shù)據(jù)有問題,可以人為的干預(yù)下。
不然直接執(zhí)行了,出現(xiàn)問題之后不好處理。總之還是在處理之前做好數(shù)據(jù)的備份工作。
實(shí)際是主從配置的擴(kuò)展,例如有兩臺機(jī)器a1,a2,主從模式為a1(M)-a2(S),雙主模式就是a1-a2,然后a2-a1
這樣,當(dāng)任意一臺掛掉的時候,其中一臺可以完全負(fù)擔(dān)起讀和寫的任務(wù)。
**創(chuàng)建主節(jié)點(diǎn)用戶供從節(jié)點(diǎn)拉取數(shù)據(jù)用(62-215)
同主
修改用戶名密碼
賬號登陸
同主
(62做從節(jié)點(diǎn)從215拉數(shù)據(jù)的賬號)
雙主至此配置完成,其實(shí)就是先配置a-b,在配置b-a
注意,每次重啟mysql服務(wù)以后,需要重新執(zhí)行start slave命令
在MySQL服務(wù)器1中,添加如下配置:
在MySQL服務(wù)器2中,添加如下設(shè)置:
在這里兩臺MySQL的配置文件,需要對auto_increment_offset字段,設(shè)定不同值。因?yàn)槿绻鹠ysql中有自增長字段,不設(shè)定這個參數(shù)會起沖突,會報duplicate....的報錯。
auto_increment_offset表示自增長字段從那個數(shù)開始,他的取值范圍是1 .. 65535
auto_increment_increment表示自增長字段每次遞增的量,其默認(rèn)值是1,取值范圍是1 .. 65535
做主主同步配置時,需要將兩臺服務(wù)器的auto_increment_increment增長量都配置為2,而要把a(bǔ)uto_increment_offset分別配置為1和2,這樣可以避免兩臺服務(wù)器同時做更新時,自增長字段的值之間發(fā)生沖突。
配置好兩臺mysql的my.cnf配置文件后,service mysqld restart 重啟mysql服務(wù)。
在Mysql服務(wù)器1中,
在MySQL服務(wù)器2中,做如上同樣的操作,然后將服務(wù)器1的file和position值設(shè)定到服務(wù)器2中,服務(wù)器2的file和position值輸入到服務(wù)器1中。
在MySQL服務(wù)器1中,輸如下命令:
在MySQL服務(wù)器2中,輸如下命令:
范例如下圖:
配置完后,分別在兩臺服務(wù)器上輸show slave status ;
如果出現(xiàn)如下兩個字段都是on的狀態(tài),則主主備份搭建完成。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在實(shí)際測試配置中,由于MySQL服務(wù)器2是克隆的MySQL服務(wù)器1的,所以start slave 后,show slave status 出現(xiàn)了Slave_IO_Running: No ,然后有如下報錯信息。告知是因?yàn)閮蓚€MySQL服務(wù)器的UUID相重復(fù)了。
只需要,將basedir,即/use/local/mysql/data中的auto.cnf文件刪掉后,重啟mysql,就會出現(xiàn)新的auto.cnf文件,里面有新的UUID