国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

MySQL主從服務器數(shù)據(jù)一致性的核對與修復

php中文網(wǎng)
發(fā)布: 2016-06-07 16:36:24
原創(chuàng)
1385人瀏覽過

我上一次遇到MySQL主從服務器數(shù)據(jù)一致性問題,想想是幾年前的事情了,還依稀記得當時驚慌失措的情景,好在最后借助Maatkit解決了問題。幾年后,當我再次面對同樣的問題時,Maatkit已經(jīng)不復存在,轉(zhuǎn)而成為了Percona Toolkit的一部分,不變的是我依舊手忙腳亂

我上一次遇到mysql主從服務器數(shù)據(jù)一致性問題,想想是幾年前的事情了,還依稀記得當時驚慌失措的情景,好在最后借助maatkit解決了問題。幾年后,當我再次面對同樣的問題時,maatkit已經(jīng)不復存在,轉(zhuǎn)而成為了percona toolkit的一部分,不變的是我依舊手忙腳亂,所以還是記錄一下吧,保不準啥時候又會遇到這個問題。

如果你在MySQL從服務器上遇到類似下面的錯誤信息,那么恭喜你中招了:

mysql> SHOW SLAVE STATUS\G
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '...' for key ...' on query.
登錄后復制

為啥會出現(xiàn)唯一索引鍵值重復?最大的可能是錯誤的對從服務器做了寫操作!出現(xiàn)此類錯誤的時候,很多人會用sql_slave_skip_counter操作跳過錯誤,甚至有人寫了腳本,如果有多個錯誤,就循環(huán)多次執(zhí)行sql_slave_skip_counter:

mysql> SET GLOBAL sql_slave_skip_counter = 1;
mysql> START SLAVE;
登錄后復制

可惜,即便sql_slave_skip_counter操作能夠暫時讓主從恢復工作,但多半數(shù)據(jù)一致性已經(jīng)被破壞的更嚴重了,早晚有一天被掩蓋的問題會再次爆發(fā)出來。

Percona Toolkit里的pt-table-checksum和pt-table-sync可以搞定此類問題。它們的安裝很簡單,可以依照自己的操作系統(tǒng)選擇下載rpm或者deb軟件包來安裝,當然也可以使用源代碼來安裝,不過要注意的是,必須確保系統(tǒng)已經(jīng)安裝了依賴的Perl軟件包:

shell> perl -MCPAN -e 'install DBI'
shell> perl -MCPAN -e 'install DBD::mysql'
shell> perl -MCPAN -e 'install Term::ReadKey'
登錄后復制

順便說一下,我在安裝某些Perl模塊的時候,出現(xiàn)類似下面的錯誤提示:

Can’t locate object method “install” via package “…”

如果你也遇到了類似的問題,可以進入到Perl命令行安裝:

shell> perl -MCPAN -e shell
cpan> install ...
登錄后復制

安裝Percona Toolkit的剩余步驟就是Perl軟件的固定打法了:

shell> perl Makefile.PL
shell> make
shell> make install
登錄后復制

補充:Percona Toolkit里的pt-slave-restart可以替代sql_slave_skip_counter:

shell> pt-slave-restart
    --host=<HOST>
    --port=<PORT>
    --user=<USER>
    --password=<PASSWORD>
    --error-numbers=1062
登錄后復制

前戲進行到這里應該可以了,下面讓我們直搗黃龍,看看如何解決問題:

MySQL主從服務器數(shù)據(jù)一致性的核對

通過在主服務器上運行pt-table-checksum,它會通過一系列的MySQL函數(shù)計算每個表的散列值,利用主從復制關系,把同樣的計算過程在從服務器上重放,從而就拿到了主從服務器各自的散列值,只要比較散列值是否相同就OK了。

這里面有兩點需要說明:

  • 計算表的散列值時,pt-table-checksum并不是直接計算整個表的散列值,而是分塊計算,這樣就避免了造成從服務器長時間的延遲。
  • 因為通過MySQL函數(shù)計算散列的過程需要在從服務器上重放,所以主從復制的格式必須是基于STATEMENT的,不能是基于ROW的。

實際操作時的命令大致如下:

shell> pt-table-checksum \
    --replicate=percona.checksums \
    --host=<MASTER_HOST> \
    --user=<MASTER_USER> \
    --password=<MASTER_PASSWORD>
登錄后復制

說明:replicate選項指定了結(jié)果保存到哪個庫和表中,如果你愿意,可以手動查詢:

SELECT db, tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks
FROM percona.checksums
WHERE (
    master_cnt <> this_cnt
    OR master_crc <> this_crc
    OR ISNULL(master_crc) <> ISNULL(this_crc))
GROUP BY db, tbl;
登錄后復制

BTW:多數(shù)情況下,只要比較「master_crc this_crc」就可以了。

MySQL主從服務器數(shù)據(jù)一致性的修復

通過在主服務器上運行pt-table-sync,它會重建數(shù)據(jù),數(shù)據(jù)通過復制從主服務器同步到從服務器,從而修復了一致性,在操作過程中,可以利用pt-table-checksum的結(jié)果。

shell> pt-table-sync \
    --execute \
    --replicate=percona.checksums \
    --charset=<CHARSET> \
    --host=<MASTER_HOST> \
    --user=<MASTER_USER> \
    --password=<MASTER_PASSWORD>
登錄后復制

說明:因為pt-table-sync會重建數(shù)據(jù),所以有一定的風險,最好提前備份好數(shù)據(jù)。如果仍然不放心,可以使用它提供的「print」選項,它會打印出相應的SQL,你可以審查一下到底執(zhí)行了那些操作,然后通過手動執(zhí)行來完成同步。

在使用Percona Toolkit的時候,細心的網(wǎng)友會發(fā)現(xiàn):在傳遞參數(shù)的時候有兩種方式:

  • –host= –user= –password=
  • h=,u=,p=

前一種是選項的形式,后一種是DSN的形式。如果使用了選項的形式,系統(tǒng)會在內(nèi)部自動轉(zhuǎn)換成DSN的形式,一般不同的信息用DSN的形式,公用的信息則用選項的形式。比如說:我要傳遞多個DSN主機信息,它們的主機名不同,但用戶名和密碼都相同,此時我會用選項的形式來傳遞用戶名和密碼,而通過DSN的形式來傳遞主機名。

本文例子中,我們?yōu)榱朔奖?,在運行Percona Toolkit命令的時候直接鍵入了密碼等敏感信息,這在很多時候是不安全的,比如說別人可以通過查看命令歷史拿到密碼。還好我們有「ask-pass」選項可以解決此類問題,實際上我們還可以更進一步,直接把密碼等敏感信息保存到配置文件中,最容易想到的配置文件是「~/.my.cnf」,此外,還有幾個更官方的配置文件可供選擇,我們可以在源代碼里看到它們的蹤影:

default_files => [
    "/etc/percona-toolkit/percona-toolkit.conf",
    "/etc/percona-toolkit/$program_name.conf",
    "$home/.percona-toolkit.conf",
    "$home/.$program_name.conf",
]
登錄后復制

俗話說:不怕賊偷,就怕賊惦記著。看待問題的態(tài)度亦是如此:不怕出問題,就怕問題潛伏在暗處窺視著你,而你卻一無所知。大家沒事兒的時候多查查主從一致性吧。

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
相關標簽:
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號