成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL主從服務器數據一致性的核對與修復

運維 系統運維
當遇到MySQL主從服務器數據一致性問題時,該怎么解決呢?本文記錄了類似問題的解決方法,希望能給朋友們帶來幫助,遇到此類問題時,不會手忙腳亂。

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

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

  1. mysql> SHOW SLAVE STATUS\G 
  2. Last_Error: Error 'Duplicate entry '...' for key ...' on query. 

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

  1. mysql> SET GLOBAL sql_slave_skip_counter = 1
  2. mysql> START SLAVE; 

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

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

  1. shell> perl -MCPAN -e 'install DBI' 
  2. shell> perl -MCPAN -e 'install DBD::mysql' 
  3. shell> perl -MCPAN -e 'install Term::ReadKey' 

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

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

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

  1. shell> perl -MCPAN -e shell 
  2. cpan> install ... 

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

  1. shell> perl Makefile.PL 
  2. shell> make 
  3. shell> make install 

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

  MySQL主從服務器數據一致性的核對

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

  這里面有兩點需要說明:

  計算表的散列值時,pt-table-checksum并不是直接計算整個表的散列值,而是分塊計算,這樣就避免了造成從服務器長時間的延遲。

  因為通過MySQL函數計算散列的過程需要在從服務器上重放,所以主從復制的格式必須是基于STATEMENT的,不能是基于ROW的。

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

  1. shell> pt-table-checksum \ 
  2. --replicate=percona.checksums \ 
  3. --host=<MASTER_HOST> \ 
  4. --user=<MASTER_USER> \ 
  5. --password=<MASTER_PASSWORD> 

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

  1. SELECT db, tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks 
  2. FROM percona.checksums 
  3. WHERE ( 
  4. master_cnt <> this_cnt 
  5. OR master_crc <> this_crc 
  6. OR ISNULL(master_crc) <> ISNULL(this_crc)) 
  7. GROUP BY db, tbl; 

  BTW:多數情況下,只要比較「master_crc <> this_crc」就可以了。

  MySQL主從服務器數據一致性的修復

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

  1. shell> pt-table-sync \ 
  2. --execute \ 
  3. --replicate=percona.checksums \ 
  4. --charset=<CHARSET> \ 
  5. --host=<MASTER_HOST> \ 
  6. --user=<MASTER_USER> \ 
  7. --password=<MASTER_PASSWORD> 

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

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

  1. default_files => [ 
  2. "/etc/percona-toolkit/percona-toolkit.conf", 
  3. "/etc/percona-toolkit/$program_name.conf", 
  4. "$home/.percona-toolkit.conf", 
  5. "$home/.$program_name.conf", 
  6. … 

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

責任編輯:黃丹 來源: 火丁筆記
相關推薦

2024-08-20 16:13:52

2023-12-01 13:51:21

數據一致性數據庫

2009-06-18 09:18:08

Oracle檢索數據數據一致性事務恢復

2023-11-22 12:55:59

微服務架構數據庫

2019-01-15 17:58:03

微服務架構數據

2019-12-17 08:40:33

微服務架構數據

2025-03-27 08:20:54

2023-05-26 07:34:50

RedisMySQL緩存

2022-02-17 21:04:27

數據庫MysqlRedis

2021-12-14 07:15:57

MySQLRedis數據

2022-09-15 10:37:46

MySQLRedis數據一致性

2024-12-26 15:01:29

2021-11-01 21:15:54

微服務系統數據

2019-11-21 10:19:45

數據應用場景系統

2023-09-07 08:11:24

Redis管道機制

2021-12-05 21:06:27

軟件

2023-09-24 14:35:43

Redis數據庫

2024-12-19 21:09:38

2021-10-18 10:30:59

流計算阿里云

2021-10-13 09:55:11

流計算引擎數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区久久久 | 日韩欧美精品在线 | 欧美久久一级特黄毛片 | www.99re| 男人的天堂亚洲 | 欧美日韩国产精品激情在线播放 | 欧美国产日本一区 | 美女在线视频一区二区三区 | 四虎影院新地址 | 欧美v在线 | 精品国产伦一区二区三区观看方式 | 国产欧美一区二区三区久久手机版 | 男人的天堂视频网站 | 亚洲一区 | 日韩精品免费一区 | 国产欧美一区二区三区久久手机版 | 国产精品s色 | 国产欧美视频一区二区三区 | 久久一区二区精品 | 久久午夜精品 | 美女国产精品 | 久夜精品 | 日韩在线看片 | 日韩二区 | 中文字幕av高清 | 欧美a在线看 | 精品九九 | 中文字幕伊人 | 色就干 | 久久精品小视频 | 超碰免费观看 | 国产婷婷色一区二区三区 | 日韩a在线观看 | 欧美精品久久久 | 成人精品网 | 欧美一级三级在线观看 | 99精品视频免费观看 | 美女久久久久久久久 | 国产一区二区三区四区 | 国产成人久久av免费高清密臂 | 精品不卡 |