亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

如何利用percona-toolkit工具檢查MySQL數據庫主從一致性以及修復

2020-06-27 15:35:31
字體:
來源:轉載
供稿:網友

利用percona-toolkit工具檢查MySQL數據庫主從復制數據的一致性,以及修復。

一、pt-table-checksum檢查主從庫數據的一致性

pt-table-checksum在MASTER上校驗指定庫、表,將結果存在一個庫表里,復制進程將檢驗sql傳遞到slave上再執行一次。通過比較M/S的檢驗值確定數據是否一致。利用主從復制做檢驗,不需要在檢驗期間對主從數據庫同時鎖表,可以控制校驗的數據和速度,不影響到正常服務。

安裝:

#依賴包yum  –y  perl-DBI  perl-DBD-MySQL  perl-TermReadKey#percona-toolkit包wget http://www.percona.com/downloads/percona-toolkit/LATEST/percona-toolkit-2.2.4.tar.gztar xzvf percona-toolkit-2.2.4.tar.gz ;  cd percona-toolkit-2.2.4 ;  perl Makefile.pl && make && make install

使用方法:

pt-table-checksum [OPTIONS] [DSN]

pt-table-checksum:在主<M>上通過執行校驗的查詢對復制的一致性進行檢查,對比主從的校驗值,從而產生結果。DSN指向的是主的地址,該工具的退出狀態不為零,如果發現有任何差別,或者如果出現任何警告或錯誤,更多信息請見官網。

不指定任何參數,會直接對本地的所有數據庫的表進行檢查。

pt-table-checksum –S /tmp/mysqld.sock u=root,p=123456

環境:

#主庫:mysql> select * from t1;+----+------+| id | name |+----+------+|  1 | aa   ||  2 | bb   ||  3 | cc   ||  4 | dd   ||  5 | ee   |+----+------+5 rows in set (0.00 sec)#從庫:mysql> select * from t1;+----+------+| id | name |+----+------+|  1 | aa   ||  2 | bb   ||  3 | cc   ||  4 | dd   |+----+------+4 rows in set (0.00 sec)

注意:

1、  根據測試,需要一個技能登錄主庫,也能登錄從庫,而且還能同步數據庫的賬號;

2、  只能指定一個host,必須為主庫的IP;

3、  在檢查時會向表加S鎖;

4、  運行之前需要從庫的同步IO和SQL進程是YES狀態。

可以用該語句授權用戶,這里為了方便直接用root用戶了

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO ‘checksums’@’x.x.x.x’ IDENTIFIED BY ‘xxxx’;

執行檢測(MASTER上):

pt-table-checksum --nocheck-replication-filters --replicate=test.checksum --databases=test h=192.168.68.235,u=root,p=123 --empty-replicate-table --create-replicate-table            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE09-18T12:03:16      0      1        5       1       0   0.018 test.t1

參數說明:

TS            :完成檢查的時間。

ERRORS        :檢查時候發生錯誤和警告的數量。

DIFFS         :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的信息。

ROWS          :表的行數。

CHUNKS        :被劃分到表中的塊的數目。

SKIPPED       :由于錯誤或警告或過大,則跳過塊的數目。

TIME          :執行的時間。

TABLE         :被檢查的表名。

參數意義:

--nocheck-replication-filters :不檢查復制過濾器,建議啟用。后面可以用--databases來指定需要檢查的數據庫。

--no-check-binlog-format      : 不檢查復制的binlog模式,要是binlog模式是ROW,則會報錯。

--replicate-check-only :只顯示不同步的信息。

--replicate=   :把checksum的信息寫入到指定表中,建議直接寫到被檢查的數據庫當中。

--databases=   :指定需要被檢查的數據庫,多個則用逗號隔開。

--tables=      :指定需要被檢查的表,多個用逗號隔開

h=127.0.0.1    :Master的地址

u=root         :用戶名

p=123456       :密碼

P=3306         :端口

更多的參數請見官網,上面指出來的是常用的,對該場景夠用的參數。

通過DIFFS是1可以看出主從的表數據不一致。通過查看從庫上的test.checksum表可以看到主從庫的檢驗信息。

 mysql> select * from checksum/G;*************************** 1. row ***************************            db: test           tbl: t1         chunk: 1    chunk_time: 0.001604   chunk_index: NULLlower_boundary: NULLupper_boundary: NULL      this_crc: 13fa7d9d    #從的校驗值      this_cnt: 4            #從的行數    master_crc: aa7a56c3    #主的校驗值    master_cnt: 5            #主的行數            ts: 2013-09-18 12:03:161 row in set (0.00 sec)

通過上面的 this_crc <> master_crc 更能清楚的看出他們的不一致了,通過chunk知道是這個張表的哪個塊上的記錄出現不一致。要是主的binlog模式是Row 則會報錯:

Replica db2 has binlog_format ROW which could cause pt-table-checksum to break replication. 

Please read "Replicas using row-based replication" in the LIMITATIONS section of the tool's documentation. 

If you understand the risks, specify --no-check-binlog-format to disable this check.

從錯誤信息得出,要是不改binlog模式的話,則在執行上面的命令時候要指定:--no-check-binlog-format,即:

pt-table-checksum  --nocheck-replication-filters --no-check-binlog-format --replicate-check-only --replicate=test.checksum --databases=test --tables=t1  h=127.0.0.1,u=root,p=123,P=3306

指定--replicate-check-only參數會在前一次pt-table-checksum檢驗的數據之上比較(不會再執行計算),顯示出數據不一致的SLAVE主機名:

[root@host125 ~]# pt-table-checksum  --nocheck-replication-filters --no-check-binlog-format --replicate-check-only --replicate=test.checksum --databases=test --tables=t1  h=127.0.0.1,u=root,p=123456,P=3306[root@host125 ~]# pt-table-checksum --nocheck-replication-filters --replicate=test.checksum --databases=test h=192.168.68.235,u=root,p=123 --empty-replicate-table --create-replicate-table --replicate-check-only Differences on host122TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARYtest.t1 1 -1 1

數據不一致的SLAVE和表都找出來了,下面就用pt-table-sync來修補數據。

二、pt-table-sync修復從庫不一致的數據

使用方法:

pt-table-sync [OPTIONS] DSN [DSN]

pt-table-sync: 高效的同步MySQL表之間的數據,他可以做單向和雙向同步的表數據。他可以同步單個表,也可以同步整個庫。它不同步表結構、索引、或任何其他模式對象。所以在修復一致性之前需要保證他們表存在。

繼續上面的復制環境,主和從的t1表數據不一致,需要修復,

執行:

[root@host125 ~]# pt-table-sync --print --replicate=test.checksum h=192.168.68.235,u=root,p=123,P=3306 h=192.168.68.232,u=root,p=123,P=3306 #先MASTER的IP,再SLAVE的IPREPLACE INTO `test`.`t1`(`id`, `name`) VALUES ('5', 'ee') /*percona-toolkit src_db:test src_tbl:t1 src_dsn:P=3306,h=192.168.68.235,p=...,u=root dst_db:test dst_tbl:t1 dst_dsn:P=3306,h=192.168.68.232,p=...,u=root lock:1 transaction:1 changing_src:test.checksum replicate:test.checksum bidirectional:0 pid:24763 user:root host:host125*/;

參數的意義:

--replicate=  :指定通過pt-table-checksum得到的表,這2個工具差不多都會一直用。

--databases=  : 指定執行同步的數據庫,多個用逗號隔開。

--tables=     :指定執行同步的表,多個用逗號隔開。

--sync-to-master :指定一個DSN,即從的IP,他會通過show processlist或show slave status 去自動的找主。

h=127.0.0.1   :服務器地址,命令里有2個ip,第一次出現的是M的地址,第2次是Slave的地址。

u=root        :帳號。

p=123456      :密碼。

--print       :打印,但不執行命令。

--execute     :執行命令。

更多的參數請見官網,上面指出來的是常用的,對該場景夠用的參數。

和上面的命令一樣效果的命令:

[root@host125 ~]# pt-table-sync --print --sync-to-master h=192.168.68.232,u=root,p=123,P=3306 --databases test --tables t1#用一個IP (SLAVE)就可以了。REPLACE INTO `test`.`t1`(`id`, `name`) VALUES ('5', 'ee') /*percona-toolkit src_db:test src_tbl:t1 src_dsn:P=3306,h=192.168.68.235,p=...,u=root dst_db:test dst_tbl:t1 dst_dsn:P=3306,h=192.168.68.232,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:24798 user:root host:host125*/;

還可以讓它自己執行修復數據的SQL語句,但是這樣就沒有輸出了:

[root@host125 ~]# pt-table-sync --execute --sync-to-master h=192.168.68.232,u=root,p=123,P=3306 --databases test --tables t1

MySQL,數據庫,percona-toolkit

數據已經修復完成了:

mysql> select * from t1;+----+------+| id | name |+----+------+|  1 | aa   ||  2 | bb   ||  3 | cc   ||  4 | dd   ||  5 | ee   |+----+------+5 rows in set (0.00 sec)

建議還是用--print 打印出來的好,這樣就可以知道那些數據有問題,可以人為的干預下。不然直接執行了,出現問題之后更不好處理??傊€是在處理之前做好數據的備份工作。

注意:要是表中沒有唯一索引或則主鍵則會報錯:

Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10591.

補充:

要是從庫有的數據,而主庫沒有,那這個數據怎么處理?會給出刪除SLAVE多余數據,和修復SLAVE缺失數據的SQL語句。

如果在shell窗口不想顯示輸入密碼則可以添加:--ask-pass 參數,如:

[root@host125 ~]# pt-table-sync --print --ask-pass --sync-to-master h=192.168.68.232,u=root,P=3306 --databases test --tables t1Enter password for 192.168.68.232:

如果使用--ask-pass,報錯:

Cannot read response; is Term::ReadKey installed? Can't locate Term/ReadKey.pm in @INC

安裝Term/ReadKey.pm模塊:

[root@host125 ~]# perl -MCPAN -e "shell"cpan[1]> install Term::ReadKey

總結:

該工具執行檢查表動作,檢查連接的帳號需要有很高的權限,在一般權限上需要加SELECT, PROCESS, SUPER, REPLICATION SLAVE等權限。pt-table-checksm 配合pt-table-sync使用,在執行pt-table-sync數據同步之前,一定要執行pt-table-checksm命令檢查。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区三区久久久| 91欧美精品午夜性色福利在线| 国产精品美女主播| 亚洲精品456在线播放狼人| 国产精品白嫩初高中害羞小美女| 成人午夜在线影院| 在线国产精品播放| 国内精品久久久久久中文字幕| 亚洲亚裔videos黑人hd| 欧美日韩成人免费| 亚洲精品自拍视频| www.日本久久久久com.| 欧美激情免费视频| 欧美午夜激情在线| 久热99视频在线观看| 欧美成年人视频网站欧美| 欧美精品福利在线| 亚州成人av在线| 国产不卡精品视男人的天堂| 日韩有码在线视频| 麻豆乱码国产一区二区三区| 亚洲欧美激情一区| 欧美日韩国产限制| 永久免费看mv网站入口亚洲| 国产精品高清在线| 精品久久久香蕉免费精品视频| 精品成人久久av| 久久久久久久久久久成人| 欧美一乱一性一交一视频| 成人福利网站在线观看11| 7777kkkk成人观看| 成人免费大片黄在线播放| 国产综合在线视频| 丝袜美腿精品国产二区| 91精品91久久久久久| 一区二区三区回区在观看免费视频| 欧美成人免费在线视频| 亚洲sss综合天堂久久| 5566成人精品视频免费| 亚洲高清免费观看高清完整版| 久久精品视频99| 日韩激情av在线播放| 91精品国产自产91精品| 欧美日韩一区二区精品| 91在线网站视频| 日韩国产在线播放| 亚洲欧美精品在线| 国产日产欧美精品| 亚洲视频在线免费观看| 全亚洲最色的网站在线观看| 美女视频黄免费的亚洲男人天堂| 中文字幕亚洲一区在线观看| 97av在线影院| 国内免费精品永久在线视频| 亚洲美女又黄又爽在线观看| 在线观看亚洲区| 欧美日韩国产成人| 亚洲在线免费观看| 一区二区欧美久久| 九九久久国产精品| 欧美另类69精品久久久久9999| 欧美大全免费观看电视剧大泉洋| 欧美大秀在线观看| 欧美午夜精品久久久久久人妖| 国产日韩欧美视频在线| 浅井舞香一区二区| 精品国产91乱高清在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲最新视频在线| 久久人人爽人人爽爽久久| 成人av在线天堂| 欧美黑人国产人伦爽爽爽| 国产精品久久久久久久9999| 国产一区二区三区在线视频| 亚洲国产99精品国自产| 欧美怡红院视频一区二区三区| 亚洲香蕉av在线一区二区三区| 色婷婷av一区二区三区久久| 国产99久久精品一区二区 夜夜躁日日躁| 欧美福利视频网站| 国产精品啪视频| 国产精品中文字幕在线| 成人444kkkk在线观看| 欧美在线亚洲一区| 欧美亚洲日本网站| 日韩精品中文字幕在线观看| 亚洲精品成人久久电影| 久久久久久久成人| 国产综合在线看| 亚洲视频在线免费观看| 久久av红桃一区二区小说| 在线不卡国产精品| 国产视频久久久久久久| 91国产美女在线观看| 欧美区在线播放| 国产精品爽黄69| 亚洲香蕉伊综合在人在线视看| 国产日韩欧美另类| 亚洲欧洲日韩国产| 456国产精品| 亚洲aa中文字幕| 国产日产欧美a一级在线| 51久久精品夜色国产麻豆| 日韩av最新在线| 亚洲电影天堂av| 亚洲国产高潮在线观看| 成人免费xxxxx在线观看| 久久久最新网址| 欧美在线不卡区| 日韩av在线免费播放| yellow中文字幕久久| 精品久久久久人成| 国产成人福利夜色影视| 久久综合88中文色鬼| 国产精品久久久久久久久久免费| 亚洲一区久久久| 97视频在线观看网址| 日韩av三级在线观看| 亚洲国产日韩一区| 欧美激情视频一区二区| 精品国产乱码久久久久久婷婷| 亚洲精品电影网站| 日韩一区二区欧美| 国产成人av网址| 久久久久99精品久久久久| 国产精品视频26uuu| 欧美性xxxx| 国产精品福利在线观看| 日韩美女写真福利在线观看| 国产丝袜一区二区三区免费视频| 国产日韩精品视频| 夜夜嗨av色一区二区不卡| 欧美极品少妇xxxxx| 亚洲香蕉成视频在线观看| 亚洲色图偷窥自拍| 国产精品7m视频| 国产精品美女www| 97在线看免费观看视频在线观看| 欧美一区二区三区免费视| 欧美日韩第一页| 欧美成人亚洲成人日韩成人| 亚洲无av在线中文字幕| 国产精自产拍久久久久久| 亚洲一区亚洲二区亚洲三区| 精品国内产的精品视频在线观看| 人妖精品videosex性欧美| 日韩福利伦理影院免费| 上原亚衣av一区二区三区| 国产欧美精品在线播放| 激情av一区二区| 日本精品性网站在线观看| 国产一区二区成人| 久久人人爽人人| 91久久国产精品| 久久免费视频在线观看| 97成人精品视频在线观看| 亚洲精品美女在线观看播放| 亚洲男人天堂网| 国产小视频91| 77777少妇光屁股久久一区| 日韩欧亚中文在线| 国产精品国语对白| 最好看的2019年中文视频| 在线激情影院一区|