溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用pt-table-checksum工具對(duì)主從數(shù)據(jù)的一致性進(jìn)行校驗(yàn)

發(fā)布時(shí)間:2020-05-21 15:14:06 來(lái)源:網(wǎng)絡(luò) 閱讀:541 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

本文主要給大家簡(jiǎn)單講講使用pt-table-checksum工具對(duì)主從數(shù)據(jù)的一致性進(jìn)行校驗(yàn),相關(guān)專業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望使用pt-table-checksum工具對(duì)主從數(shù)據(jù)的一致性進(jìn)行校驗(yàn)這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。

背景描述:

因?yàn)橹鲝膹?fù)制導(dǎo)致主從數(shù)據(jù)不一致,所以使用pt-table-checksum工具來(lái)進(jìn)行主從數(shù)據(jù)的一致性校驗(yàn),用pt-table-sync工具將差異數(shù)據(jù)補(bǔ)齊,以下是使用工具時(shí)的流程、遇到的問(wèn)題及解決方法,以期最大限度的模擬線上環(huán)境

環(huán)境:

backup為master主機(jī)(192.168.32.3),mydb為slave主機(jī)(192.168.32.2)

backup為3316端口,mydb為3306端口

binlog_format = ROW

pt-table-checksum 3.0.10 版本(percona-toolkit請(qǐng)自行安裝)

準(zhǔn)備工作:

1、安裝依賴包:

[root@backup ~]#yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL

2、創(chuàng)建用戶:

創(chuàng)建一個(gè)對(duì)bakup、mydb主機(jī)都有權(quán)限的非root用戶,來(lái)進(jìn)行數(shù)據(jù)查看、恢復(fù)操作,目的嘛,為了安全唄,注意:這個(gè)用戶一定要相同,相同,相同!為了控制權(quán)限,可以只在各自的主機(jī)上授權(quán)

backup主機(jī):

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'monitor'@'127.0.0.1' IDENTIFIED BY '123456';

mydb主機(jī):

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'monitor'@'192.168.32.3' IDENTIFIED BY '123456';

工具用法:

[root@backup ~]# pt-table-checksum --help

Usage: pt-table-checksum [OPTIONS] [DSN]  這里注意一下:DSN連接的是主庫(kù)的地址,這里指的是backup的地址

工具使用規(guī)則:

1、被檢測(cè)的表需要有主鍵(唯一索引),因?yàn)檫@是pt-table-checksum的工作原理

2、從庫(kù)的IO、SQL進(jìn)程要為YES狀態(tài),因?yàn)閺膸?kù)要同步主庫(kù)的checksum信息

3、執(zhí)行校驗(yàn)時(shí)的DSN為主庫(kù)地址

4、校驗(yàn)時(shí)會(huì)加S鎖

5、確保主庫(kù)、從庫(kù)使用相同的賬號(hào)

執(zhí)行檢驗(yàn)(backup主機(jī)上執(zhí)行):

[root@backup ~]#pt-table-checksum --nocheck-replication-filters  --databases=bailidb h=127.0.0.1,u=monitor,p='123456',P=3316 --replicate-check-only

Checking if all tables can be checksummed ...

Starting checksum ...

Cannot connect to P=3306,h=,p=...,u=monitor

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

報(bào)錯(cuò)原因:

主庫(kù)連接不到從庫(kù),需要配置從庫(kù)

report_host=192.168.32.2

report_port=3306

當(dāng)然了,因?yàn)閞eport_host、report_port是read only變量,所以,需要重啟數(shù)據(jù)庫(kù)

再次執(zhí)行校驗(yàn):

[root@backup ~]# pt-table-checksum --nocheck-replication-filters  --databases=bailidb h=127.0.0.1,u=monitor,p='123456',P=3316 --replicate-check-only

Checking if all tables can be checksummed ...

Starting checksum ...

Replica mydb 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

報(bào)錯(cuò)原因:

如果是基于行的復(fù)制環(huán)境(即binlog_format=row),percona官方是不建議使用pt-table-checksum工具來(lái)進(jìn)行數(shù)據(jù)的一致性檢查的,但它又提供了一個(gè)選項(xiàng)來(lái)跳過(guò)此檢查,--no-check-binlog-format

再次執(zhí)行校驗(yàn):

打印出所有的校驗(yàn)信息:(可以保存到文件做后期的處理)

[root@backup ~]#pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=bailidb h=127.0.0.1,u=monitor,p='123456',P=3316 > [chayi.txt]

只打印有差異數(shù)據(jù)的校驗(yàn)信息:

[root@backup ~]#pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=bailidb h=127.0.0.1,u=monitor,p='123456',P=3316 --replicate-check-only > [chayi.txt]

將校驗(yàn)數(shù)據(jù)寫入到數(shù)據(jù)表中:

[root@backup ~]#pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --databases=bailidb h=127.0.0.1,u=monitor,p='123456',P=3316 [--recursion-method=hosts/--recursion-method=processlist]

--nocheck-replication-filters 不檢查復(fù)制過(guò)濾器,此參數(shù)經(jīng)常和--databases參數(shù)配合使用,對(duì)單個(gè)庫(kù)進(jìn)行校驗(yàn)

--no-check-binlog-format 不檢查復(fù)制的二進(jìn)制日志文件格式,如果你的binlog_format=row,則要開啟此參數(shù),否則報(bào)錯(cuò)

--replicate=test.checksums 將校驗(yàn)的信息寫入到test庫(kù)的checksums表中,如果這個(gè)表沒(méi)有的話,會(huì)自動(dòng)創(chuàng)建,且master、slave主機(jī)都會(huì)有

--databases 指定檢驗(yàn)的數(shù)據(jù)庫(kù),多個(gè)用 "," 隔開

--replicate-check-only 只顯示有不一致數(shù)據(jù)的信息

--recursion-method=hosts 如果使用pt-table-checksum校驗(yàn)的時(shí)候,報(bào)錯(cuò)信息出現(xiàn)"no slaves were found",需要使用此參數(shù)

h 主庫(kù)ip

u 主庫(kù)、從庫(kù)共同的那個(gè)用戶名

p 主庫(kù)、從庫(kù)共同的那個(gè)用戶密碼

P 主庫(kù)端口號(hào),這里主庫(kù)是3316端口

特別注意:

--replicate-check-only、--recursion-method=hosts 此類的參數(shù),使用的時(shí)候是有順序的要求的,必須在pt-table-checksum使用的DSN之后!

[root@backup ~]# pt-table-checksum --help

Options and values after processing arguments

校驗(yàn)結(jié)果介紹:

Checking if all tables can be checksummed ...

Starting checksum ...

            TS         ERRORS      DIFFS     ROWS    DIFF_ROWS  CHUNKS SKIPPED    TIME     TABLE

06-20T11:58:16          0          0           69              0                   1           0           0.298     bailidb.bl_admin

06-20T11:58:18          0          1           13              0                   1           0           0.022     bailidb.bl_block

TS:完成檢查的時(shí)間

ERRORS:檢查時(shí)候發(fā)生錯(cuò)誤和警告的數(shù)量

DIFFS:最重要的一列,顯示校驗(yàn)結(jié)果是否一致,0表示一致,1表示不一致

ROWS:表的行數(shù),這里的指的是master主機(jī)的

CHUNKS:被劃分到表中的塊的數(shù)目

SKIPPED:由于錯(cuò)誤或警告或過(guò)大,則跳過(guò)塊的數(shù)目

TIME:執(zhí)行校驗(yàn)的時(shí)間

TABLE:被校驗(yàn)的標(biāo)明

使用pt-table-sync工具查看差異數(shù)據(jù)的詳細(xì)信息:

[root@backup ~]#pt-table-sync --replicate=test.checksums h=127.0.0.1,u=monitor,P=3316 --ask-pass h=192.168.32.2,u=monitor,P=3306 --ask-pass --charset=utf8 --print

Enter password for 127.0.0.1: 

Enter password for 192.168.32.2: 

也可以只查看其中一張表的信息:

[root@backup ~]# pt-table-sync --replicate=test.checksums --tables=bl_major h=127.0.0.1,u=monitor,P=3316 --ask-pass h=192.168.32.2,u=monitor,P=3306 --ask-pass --charset=utf8 --print

Enter password for 127.0.0.1: 

Enter password for 192.168.32.2:

注意:

為了最大限度的保障線上數(shù)據(jù)庫(kù)的安全性,所以,我們每做一步都要考慮線上的實(shí)際應(yīng)用環(huán)境,盡量做到:能不重啟數(shù)據(jù)庫(kù)就不重啟,能不明文輸密碼,就不明文,一句話,為了安全,為了安全,為了安全

執(zhí)行差異數(shù)據(jù)同步:

[root@backup ~]#pt-table-sync --replicate=test.checksums h=127.0.0.1,u=monitor,P=3316 --ask-pass h=192.168.32.2,u=monitor,P=3306 --ask-pass --execute

[root@iZ2ze1wy2vjnk07k06p7s5Z ~]# pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=bailitop h=127.0.0.1,u=monitor,P=3316 --ask-pass

Can't locate Term/ReadKey.pm

yum -y install  perl-TermReadKey

使用pt-table-checksum工具對(duì)主從數(shù)據(jù)的一致性進(jìn)行校驗(yàn)就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專業(yè)知識(shí)分享給大家的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI