日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

pt-table-checksum与pt-table-sync使用实践

發(fā)布時(shí)間:2025/3/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pt-table-checksum与pt-table-sync使用实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


--------------原文地址:http://www.cnblogs.com/gomysql/p/3662264.html


mysql在工作中接觸最多的就是mysql replication,由于現(xiàn)在公司也還在使用mysql 5.1.x版本,在復(fù)制方面還是比較多的問(wèn)題,比如主庫(kù)宕機(jī)或者從庫(kù)宕機(jī)都會(huì)導(dǎo)致復(fù)制中斷,通常我們需要進(jìn)行人為修復(fù)(mysql 5.5版本解決大部分問(wèn)題),或者很多時(shí)候需要把一個(gè)從庫(kù)提升為主庫(kù),但對(duì)從庫(kù)和主庫(kù)的數(shù)據(jù)一致性不能保證一樣,所以就利用 pt-table-checksum 工作來(lái)檢查主從的一致性,以及通過(guò) pt-table-sync 如何修復(fù)這些不一致的數(shù)據(jù)。當(dāng)然如果你數(shù)據(jù)量小,slave只是當(dāng)做一個(gè)備份使用,那么出現(xiàn)數(shù)據(jù)不一致完全可以重做,或者通過(guò)其他方法解決。如果數(shù)據(jù)量非常大,重做就是非常蛋碎的一件事情了。^_^

工具安裝:

1.軟件下載:

[root@MySQL-01?~]#?wget?http://www.percona.com/downloads/percona-toolkit/LATEST/RPM/percona-toolkit-2.2.7-1.noarch.rpm

2.安裝該工具依賴(lài)的軟件包:

[root@MySQL-01?~]#?yum?install?perl-IO-Socket-SSL?perl-DBD-MySQL?perl-Time-HiRes?-y

3.軟件安裝:

[root@MySQL-01?~]#?rpm?-ivh?percona-toolkit-2.2.7-1.noarch.rpm? Preparing...????????????????###########################################?[100%] 1:percona-toolkit????????###########################################?[100%] [root@MySQL-02?~]#

使用方法:

pt-table-checksum?[OPTIONS]?[DSN]

pt-table-checksum:在主(master)上通過(guò)執(zhí)行校驗(yàn)的查詢(xún)對(duì)復(fù)制的一致性進(jìn)行檢查,對(duì)比主從的校驗(yàn)值,從而產(chǎn)生結(jié)果。DSN指向的是主的地址,該工具的退出狀態(tài)不為零,如果發(fā)現(xiàn)有任何差別,或者如果出現(xiàn)任何警告或錯(cuò)誤,更多信息請(qǐng)查看官方資料。

下面通過(guò)實(shí)際的例子來(lái)解釋該工具如何使用:

主庫(kù):


mysql>?select?*??from?yayun.t1; +----+-------+ |?id?|?name??| +----+-------+ |??1?|?yayun?| |??2?|?atlas?| |??3?|?mysql?| +----+-------+ 3?rows?in?set?(0.00?sec) mysql>

備庫(kù):

mysql>?select?*?from?yayun.t1; +----+----------+ |?id?|?name?????| +----+----------+ |??1?|?yayun????| |??2?|?atlas????| |??3?|?mysql????| |??4?|?dengyy???| |??5?|?love?sql?| +----+----------+ 5?rows?in?set?(0.00?sec) mysql>

很明顯主從數(shù)據(jù)不一致,那么我們使用工具來(lái)檢測(cè):

[root@MySQL-01?~]#?pt-table-checksum?--nocheck-replication-filters?--replicate=yayun.checksums?--databases=yayun?--tables=t1?h=127.0.0.1,u=root,p=123456,P=3306 Replica?MySQL-02?has?binlog_format?MIXED?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. [root@MySQL-01?~]#

從錯(cuò)誤信息得出,要是不改binlog模式的話(huà),則在執(zhí)行上面的命令時(shí)候要指定:
--no-check-binlog-format,即:

[root@MySQL-01?~]#?pt-table-checksum?--nocheck-replication-filters??--no-check-binlog-format?--replicate=yayun.checksums?--databases=yayun?--tables=t1?h=127.0.0.1,u=root,p=123456,P=3306 Cannot?connect?to?P=3306,h=192.168.0.20,p=...,u=root Diffs?cannot?be?detected?because?no?slaves?were?found.??Please?read?the?--recursion-method?documentation?for?information. TS?ERRORS??DIFFS?????ROWS??CHUNKS?SKIPPED????TIME?TABLE 04-13T15:44:23??????0??????0????????3???????1???????0???0.044?yayun.t1 [root@MySQL-01?~]#

Diffs cannot be detected because no slaves were found. ?Please read the --recursion-method documentation for information.

這個(gè)報(bào)錯(cuò)又是為什么呢?很多文章都沒(méi)有說(shuō)到,我真搞不清楚那文章怎么寫(xiě)出來(lái)的,囧。。。。

上面的提示信息很清楚,因?yàn)檎也坏綇?#xff0c;所以執(zhí)行失敗。用參數(shù)--recursion-method?可以指定模式解決,關(guān)于--recursion-method參數(shù)的設(shè)置有:

METHOD???????USES ===========??============================================= processlist??SHOW?PROCESSLIST hosts????????SHOW?SLAVE?HOSTS cluster??????SHOW?STATUS?LIKE?'wsrep\_incoming\_addresses'dsn=DSN??????DSNs?from?a?table none?????????Do?not?find?slaves

默認(rèn)是通過(guò)show processlist 找到host的值或show slave hosts 找到host的值。

mysql>?show?processlist\G ***************************?1.?row?***************************Id:?3User:?slaveHost:?192.168.0.20:52352db:?NULLCommand:?Binlog?DumpTime:?4164State:?Master?has?sent?all?binlog?to?slave;?waiting?for?binlog?to?be?updatedInfo:?NULL ***************************?2.?row?***************************Id:?33User:?rootHost:?localhostdb:?NULLCommand:?QueryTime:?0State:?NULLInfo:?show?processlist2?rows?in?set?(0.00?sec)

還有一種方法是show slave hosts;前提從庫(kù)配置文件里面已經(jīng)配置自己的地址和端口:

[root@MySQL-02?~]#?grep?'report'?/etc/my.cnf? report_host?=?192.168.0.20report_port?=?3306 [root@MySQL-02?~]#mysql?-uroot?-pxxx mysql>?show?slave?hosts; +-----------+--------------+------+-----------+ |?Server_id?|?Host?????????|?Port?|?Master_id?| +-----------+--------------+------+-----------+ |?????????2?|?192.168.0.20?|?3306?|?????????1?| +-----------+--------------+------+-----------+ 1?row?in?set?(0.00?sec) mysql>

所以找不到從服務(wù)器時(shí)。在從庫(kù)配置文件添加

report_host=slave_ip

report_port=slave_port

最重要的一點(diǎn)是我們需要在從庫(kù)上授權(quán),能讓主庫(kù)訪問(wèn)。很多文章沒(méi)提,卻能正常進(jìn)行,不得不說(shuō)大牛就是牛B

注意:

1、? 根據(jù)測(cè)試,需要一個(gè)即能登錄主庫(kù),也能登錄從庫(kù)的賬號(hào);

2、? 只能指定一個(gè)host,必須為主庫(kù)的IP;

3、? 在檢查時(shí)會(huì)向表加S鎖;

4、? 運(yùn)行之前需要從庫(kù)的同步IO和SQL進(jìn)程是YES狀態(tài)。

mysql>?GRANT?SELECT,?PROCESS,?SUPER,?REPLICATION?SLAVE?ON?*.*?TO?'root'@'192.168.0.10'?IDENTIFIED?BY?'123456'; Query?OK,?0?rows?affected?(0.00?sec) mysql>?flush?privileges; Query?OK,?0?rows?affected?(0.00?sec) mysql>

現(xiàn)在我們?cè)賮?lái)檢測(cè)數(shù)據(jù)一致性:

[root@MySQL-01?~]#?pt-table-checksum?--nocheck-replication-filters??--no-check-binlog-format?--replicate=yayun.checksums?--databases=yayun?--tables=t1?h=127.0.0.1,u=root,p=123456,P=3306 TS?ERRORS??DIFFS?????ROWS??CHUNKS?SKIPPED????TIME?TABLE 04-13T15:59:31??????0??????1????????3???????1???????0???0.080?yayun.t1 [root@MySQL-01?~]# 結(jié)果解析: TS????????????:完成檢查的時(shí)間。 ERRORS????????:檢查時(shí)候發(fā)生錯(cuò)誤和警告的數(shù)量。 DIFFS?????????:0表示一致,1表示不一致。當(dāng)指定--no-replicate-check時(shí),會(huì)一直為0,當(dāng)指定--replicate-check-only會(huì)顯示不同的信息。 ROWS??????????:表的行數(shù)。 CHUNKS????????:被劃分到表中的塊的數(shù)目。 SKIPPED???????:由于錯(cuò)誤或警告或過(guò)大,則跳過(guò)塊的數(shù)目。 TIME??????????:執(zhí)行的時(shí)間。 TABLE?????????:被檢查的表名。

參數(shù)的意思:

--nocheck-replication-filters?:不檢查復(fù)制過(guò)濾器,建議啟用。后面可以用--databases來(lái)指定需要檢查的數(shù)據(jù)庫(kù)。 --no-check-binlog-format????:不檢查復(fù)制的binlog模式,要是binlog模式是ROW,則會(huì)報(bào)錯(cuò)。 --replicate-check-only?:只顯示不同步的信息。 --replicate=???:把checksum的信息寫(xiě)入到指定表中,建議直接寫(xiě)到被檢查的數(shù)據(jù)庫(kù)當(dāng)中。? --databases=???:指定需要被檢查的數(shù)據(jù)庫(kù),多個(gè)則用逗號(hào)隔開(kāi)。 --tables=??????:指定需要被檢查的表,多個(gè)用逗號(hào)隔開(kāi) h=127.0.0.1????:Master的地址 u=root?????????:用戶(hù)名 p=123456???????:密碼 P=3306?????????:端口

好了,命令以及常用參數(shù)都介紹了,一起解釋下上面執(zhí)行的效果:
通過(guò)DIFFS?是1 就可以看出主從的表數(shù)據(jù)不一致。怎么不一致呢??通過(guò)指定--replicate=yayun.checksums?參數(shù),就說(shuō)明把檢查信息都寫(xiě)到了checksums表中。
進(jìn)入SLAVE相應(yīng)的庫(kù)中查看checksums表的信息:

mysql>?select?*?from?checksums\G ***************************?1.?row?***************************db:?yayuntbl:?t1chunk:?1chunk_time:?0.010735chunk_index:?NULLlower_boundary:?NULLupper_boundary:?NULLthis_crc:?babf1dc0????#slavethis_cnt:?5???????????#slavemaster_crc:?8727436a????#mastermaster_cnt:?3???????????#master?????????????????可以發(fā)現(xiàn)表t1中從庫(kù)比主庫(kù)多2條記錄ts:?2014-04-13?16:05:161?row?in?set?(0.00?sec) mysql>

通過(guò)上面找到了這些不一致的數(shù)據(jù)表,如何同步數(shù)據(jù)呢?即如何修復(fù)MySQL主從不一致的數(shù)據(jù),讓他們保持一致性呢?利用另外一個(gè)工具?pt-table-sync。
使用方法:

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

pt-table-sync:?高效的同步MySQL表之間的數(shù)據(jù),他可以做單向和雙向同步的表數(shù)據(jù)。他可以同步單個(gè)表,也可以同步整個(gè)庫(kù)。它不同步表結(jié)構(gòu)、索引、或任何其他模式對(duì)象。所以在修復(fù)一致性之前需要保證他們表存在。

接著上面的復(fù)制情況,主和從的t1表數(shù)據(jù)不一致,需要修復(fù),
執(zhí)行

先master的ip,用戶(hù),密碼,然后是slave的ip,用戶(hù),密碼

[root@MySQL-01?~]#?pt-table-sync?--replicate=yayun.checksums?h=127.0.0.1,u=root,p=123456?h=192.168.0.20,u=root,p=123456?--print DELETE?FROM?`yayun`.`t1`?WHERE?`id`='4'?LIMIT?1?/*percona-toolkit?src_db:yayun?src_tbl:t1?src_dsn:h=127.0.0.1,p=...,u=root?dst_db:yayun?dst_tbl:t1?dst_dsn:h=192.168.0.20,p=...,u=root?lock:1?transaction:1?changing_src:yayun.checksums?replicate:yayun.checksums?bidirectional:0?pid:2190?user:root?host:MySQL-01*/; DELETE?FROM?`yayun`.`t1`?WHERE?`id`='5'?LIMIT?1?/*percona-toolkit?src_db:yayun?src_tbl:t1?src_dsn:h=127.0.0.1,p=...,u=root?dst_db:yayun?dst_tbl:t1?dst_dsn:h=192.168.0.20,p=...,u=root?lock:1?transaction:1?changing_src:yayun.checksums?replicate:yayun.checksums?bidirectional:0?pid:2190?user:root?host:MySQL-01*/; [root@MySQL-01?~]#

參數(shù)的意義:

--replicate=??:指定通過(guò)pt-table-checksum得到的表,這2個(gè)工具差不多都會(huì)一直用。 --databases=??:?指定執(zhí)行同步的數(shù)據(jù)庫(kù),多個(gè)用逗號(hào)隔開(kāi)。 --tables=?????:指定執(zhí)行同步的表,多個(gè)用逗號(hào)隔開(kāi)。 --sync-to-master?:指定一個(gè)DSN,即從的IP,他會(huì)通過(guò)show?processlist或show?slave?status?去自動(dòng)的找主。 h=127.0.0.1???:服務(wù)器地址,命令里有2個(gè)ip,第一次出現(xiàn)的是Master的地址,第2次是Slave的地址。 u=root????????:帳號(hào)。 p=123456??????:密碼。 --print???????:打印,但不執(zhí)行命令。 --execute?????:執(zhí)行命令。

命令介紹完了,一起解釋下執(zhí)行的效果:通過(guò)(--print)打印出來(lái)了修復(fù)數(shù)據(jù)的sql語(yǔ)句,可以手動(dòng)的去從行執(zhí)行,讓他們數(shù)據(jù)保持一致性。那能否直接執(zhí)行?當(dāng)然可以,通過(guò)(--execute)

[root@MySQL-01?~]#?pt-table-sync?--replicate=yayun.checksums?h=127.0.0.1,u=root,p=123456?h=192.168.0.20,u=root,p=123456?--execute

沒(méi)發(fā)現(xiàn)任何異常,然后檢查主從數(shù)據(jù)的一致性:

[root@MySQL-01?~]#?pt-table-checksum?--nocheck-replication-filters??--no-check-binlog-format?--replicate=yayun.checksums?--databases=yayun?--tables=t1?h=127.0.0.1,u=root,p=123456,P=3306 TS?ERRORS??DIFFS?????ROWS??CHUNKS?SKIPPED????TIME?TABLE 04-13T16:27:28??????0??????0????????3???????1???????0???0.097?yayun.t1 [root@MySQL-01?~]#

主庫(kù):

mysql>?select?*?from?t1; +----+-------+ |?id?|?name??| +----+-------+ |??1?|?yayun?| |??2?|?atlas?| |??3?|?mysql?| +----+-------+ 3?rows?in?set?(0.00?sec) mysql>

備庫(kù):

mysql>?select?*?from?t1; +----+-------+ |?id?|?name??| +----+-------+ |??1?|?yayun?| |??2?|?atlas?| |??3?|?mysql?| +----+-------+ 3?rows?in?set?(0.00?sec) mysql>

OK,數(shù)據(jù)已經(jīng)保持一致了。不過(guò)建議還是用--print 打印出來(lái)的好,這樣就可以知道那些數(shù)據(jù)有問(wèn)題,可以人為的干預(yù)下。不然直接執(zhí)行了,出現(xiàn)問(wèn)題之后更不好處理。總之還是在處理之前做好數(shù)據(jù)的備份工作。

注意:要是表中沒(méi)有唯一索引或則主鍵則會(huì)報(bào)錯(cuò):

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

總結(jié):

工具很給力,工作中常常在使用。注意使用該工具需要授權(quán),一般SELECT, PROCESS, SUPER, REPLICATION SLAVE等權(quán)限就已經(jīng)足夠了。


出處:Atlas的博客 http://www.cnblogs.com/gomysql

感謝好文章

轉(zhuǎn)載于:https://blog.51cto.com/arthur376/1963396

總結(jié)

以上是生活随笔為你收集整理的pt-table-checksum与pt-table-sync使用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美大片a| 我不卡一区二区 | 国产成人啪免费观看软件 | 93久久精品日日躁夜夜躁欧美 | 污av| 亚州av一区二区 | 天天射日日操 | 欧美日韩一区三区 | 国产精品成人av久久 | 性中国古装videossex | 日本全黄裸体片 | jizz内谢中国亚洲jizz | 日韩无码专区 | 一区二区在线观看免费 | 7777精品视频 | 超级碰在线观看 | 日韩一区二区免费视频 | 亚洲网站视频 | 咪咪av| 91丝袜美女 | 69视频在线 | 婷婷在线视频观看 | 日本免费a视频 | 青青草免费在线 | 精品亚洲永久免费 | 91免费黄色 | 天天操天天干天天舔 | 91黄在线看 | 欧美日韩精品二区 | 免费视频久久久 | 成人精品一区二区三区在线 | 国产美女精品 | 椎名空在线 | 激情小视频在线观看 | 国产视频污在线观看 | 天天干天天干 | 少妇姐姐 | 日韩射吧 | 天天欧美 | 国内精品久久久久久久久久 | 国产成人久久精品流白浆 | 国产精品porn | 亚洲熟妇av一区二区三区 | 亚洲天堂首页 | 中文字幕3页 | 夜夜嗨老熟女av一区二区三区 | 成人毛毛片 | 人人妻人人澡人人爽国产一区 | 一区二区在线视频观看 | 天堂网av在线 | 午夜亚洲精品 | 艳妇臀荡乳欲伦交换gif | 日韩av资源站 | 超碰成人福利 | 92久久精品一区二区 | 第色| 日韩视频一区二区在线观看 | 国产欧美精品一区二区 | 国产精品区在线 | 国精无码欧精品亚洲一区蜜桃 | 天堂va蜜桃一区二区三区 | 草啪啪| 久久久久影视 | 国产在线无 | 天天射夜夜骑 | 日韩欧美一区在线观看 | 色婷婷免费视频 | 亚洲a视频 | 日本妇乱大交xxxxx | 中文字幕一区二区三区在线视频 | 一区二区视频在线 | 2024男人天堂 | 韩国日本在线观看 | 亚洲免费高清 | 日韩天堂在线 | 国产清纯白嫩初高中在线观看性色 | 日韩欧美国产网站 | 国产成人精品午夜福利Av免费 | 嫩草视频在线 | 丁香花五月 | 国产精品久免费的黄网站 | 国产日韩精品一区二区三区在线 | 亚洲熟女乱综合一区二区三区 | 网站av在线| 中文字幕日韩精品在线 | 善良的女朋友在线观看 | 综合激情视频 | 特级毛片爽www免费版 | 曰女同女同中文字幕 | 亚洲成av人片在线观看 | 午夜在线观看视频 | 四虎网址在线 | 国产精品福利一区二区 | 成人18视频在线观看 | 五月婷在线观看 | 激情777 | 国产男女网站 | 91视频免费观看网站 | 人妻 丝袜美腿 中文字幕 |