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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明

發(fā)布時(shí)間:2024/1/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:

????? 工作上需要把一個(gè)從庫提升為主庫,但對從庫和主庫的數(shù)據(jù)一致性不能保證一樣,所以就利用 pt-table-checksum 工作來檢查主從的一致性(之前寫過用1.0.1的版本可以進(jìn)行操作的文章,但是在新版本操作就不行了,只能重新來過)以及通過 pt-table-sync 如何修復(fù)這些不一致的數(shù)據(jù)。

前提:

下載地址:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz

安裝方法:perl Makefile.PL;make;make install

使用方法:

pt-table-checksum [OPTIONS] [DSN]

pt-table-checksum在主<M>上通過執(zhí)行校驗(yàn)的查詢對復(fù)制的一致性進(jìn)行檢查,對比主從的校驗(yàn)值,從而產(chǎn)生結(jié)果。DSN指向的是主的地址,該工具的退出狀態(tài)不為零,如果發(fā)現(xiàn)有任何差別,或者如果出現(xiàn)任何警告或錯(cuò)誤,更多信息請見官網(wǎng)。
不制定任何參數(shù),會直接對本地的所有數(shù)據(jù)庫的表進(jìn)行檢查。

pt-table-checksum -S /var/run/mysqld/mysqld.sock

現(xiàn)在開始使用它,檢查主從狀態(tài):
表信息:

View Code 主庫: root@localhost : rep_test 04:17:29>select * from test1; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +----+------+ 4 rows in set (0.00 sec)從庫: dba@192.168.200.201 : rep_test 04:17:25>select * from test1; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 4 | d | +----+------+ 3 rows in set (0.00 sec)

執(zhí)行:

zhoujy@zhoujy:~$ pt-table-checksum --nocheck-replication-filters --replicate=rep_test.checksums --databases=rep_test --tables=test1 h=127.0.0.1,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE 05-08T16:21:06 0 1 4 1 0 0.012 rep_test.test1 TS :完成檢查的時(shí)間。 ERRORS :檢查時(shí)候發(fā)生錯(cuò)誤和警告的數(shù)量。 DIFFS :0表示一致,1表示不一致。當(dāng)指定--no-replicate-check時(shí),會一直為0,當(dāng)指定--replicate-check-only會顯示不同的信息。 ROWS :表的行數(shù)。 CHUNKS :被劃分到表中的塊的數(shù)目。 SKIPPED :由于錯(cuò)誤或警告或過大,則跳過塊的數(shù)目。 TIME :執(zhí)行的時(shí)間。 TABLE :被檢查的表名。

參數(shù)的意義:

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

更多的參數(shù)請見官網(wǎng),上面指出來的是常用的,對該場景夠用的參數(shù)。

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

dba@192.168.200.201 : rep_test 05:19:13>select * from checksums\G; *************************** 1. row ***************************db: rep_testtbl: test1chunk: 1chunk_time: 0.000257chunk_index: NULL lower_boundary: NULL upper_boundary: NULL this_crc: b24c0933 #從的this_cnt: 3 #從的master_crc: f2890e1c #主的master_cnt: 4 #主的ts: 2013-05-08 17:18:18 1 row in set (0.00 sec)

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

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.

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

pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=rep_test.checksums --databases=rep_test --tables=test1,test2 h=127.0.0.1,u=root,p=123456,P=3306

注意:

要是在執(zhí)行命令的過程遇到找不到從服務(wù)器的錯(cuò)誤:

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

上面的提示信息很清楚,因?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)是通過show processlist 找到host的值或show slave hosts 找到host的值。那上面為什么會找不到從呢?

個(gè)人猜測:測試下來是因?yàn)樵谕粋€(gè)服務(wù)器上開啟了2個(gè)實(shí)例互為主從,通過processlist 得到的 host 主從一樣,但是沒有,而 show slave hosts,因?yàn)閺纳蠜]有指定所以也取不到需要的信息。解決辦法:

在從的配置文件里加:

report_host = 192.168.200.25 #設(shè)置成本地地址

這樣在主上執(zhí)行 show slave hosts 就有信息了:

root@localhost : (none) 02:47:43>show slave hosts; +-----------+----------------+------+----------+------+-------------------+-----------+ | Server_id | Host | User | Password | Port | Rpl_recovery_rank | Master_id | +-----------+----------------+------+----------+------+-------------------+-----------+ | 2 | 192.168.200.25 | | | 3307 | 0 | 1 | +-----------+----------------+------+----------+------+-------------------+-----------+ 1 row in set (0.00 sec)

最后再執(zhí)行以上命令(多加--recursion-method=hosts 參數(shù))

zhoujy@zhoujy:~$ pt-table-checksum --recursion-method=hosts --no-check-binlog-format --nocheck-replication-filters --replicate=aaa.checksums --databases=aaa --tables=test h=192.168.200.25,u=root,p=123456,P=3306TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE 10-24T14:54:43 0 1 6 1 0 0.306 aaa.test

通過上面找到了這些不一致的數(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è)庫。它不同步表結(jié)構(gòu)、索引、或任何其他模式對象。所以在修復(fù)一致性之前需要保證他們表存在。

接著上面的復(fù)制情況,主和從的test1數(shù)據(jù)不一致,需要修復(fù),要是有中文的則需要加上:--charset=utf8,防止亂碼。
執(zhí)行

root@zhoujy:~# pt-table-sync --replicate=rep_test.checksums h=127.0.0.1,u=root,p=123456 h=192.168.200.201,u=root,p=123456 --charset=utf8 --print REPLACE INTO `rep_test`.`test1`(`id`, `name`) VALUES ('3', 'c')
#先M的IP,再S的IP
/*percona-toolkit src_db:rep_test src_tbl:test1 src_dsn:h=127.0.0.1,p=...,u=root dst_db:rep_test dst_tbl:test1 dst_dsn:h=192.168.200.201,p=...,u=root lock:1 transaction:0 changing_src:rep_test.checksums replicate:rep_test.checksums bidirectional:0 pid:12285 user:root host:zhoujy*/;

參數(shù)的意義:

--replicate= :指定通過pt-table-checksum得到的表,這2個(gè)工具差不多都會一直用。 --databases= : 指定執(zhí)行同步的數(shù)據(jù)庫,多個(gè)用逗號隔開。 --tables= :指定執(zhí)行同步的表,多個(gè)用逗號隔開。 --sync-to-master :指定一個(gè)DSN,即從的IP,他會通過show processlist或show slave status 去自動的找主。 h=127.0.0.1服務(wù)器地址,命令里有2個(gè)ip,第一次出現(xiàn)的是M的地址,第2次是Slave的地址。 u=root :帳號。 p=123456 :密碼。 --print :打印,但不執(zhí)行命令。 --execute :執(zhí)行命令。
更多的參數(shù)請見官網(wǎng),上面指出來的是常用的,對該場景夠用的參數(shù)。

上面的效果和這個(gè)一樣:

zhoujy@zhoujy:~$ pt-table-sync --sync-to-master h=192.168.200.201,u=root,p=123456 --databases=rep_test --tables=test1 --charset=utf8 --print REPLACE INTO `rep_test`.`test1`(`id`, `name`) VALUES ('3', 'c')
#用一個(gè)IP(SLAVE)就可以了。
/*percona-toolkit src_db:rep_test src_tbl:test1 src_dsn:P=3306,h=192.168.200.25,p=...,u=root dst_db:rep_test dst_tbl:test1 dst_dsn:h=192.168.200.201,p=...,u=root lock:1 transaction:1 changing_src:1 replicate:0 bidirectional:0 pid:20122 user:zhoujy host:zhoujy*/;

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

root@zhoujy:~# pt-table-sync --replicate=rep_test.checksums --databases=rep_test --tables=test2,test1 h=127.0.0.1,u=root,p=123456 h=192.168.200.201,u=root,p=123456 --execute root@zhoujy:~#

直接執(zhí)行完畢了,查看數(shù)據(jù)表:

View Code 主: root@localhost : rep_test 08:58:41>select * from test1; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +----+------+ 4 rows in set (0.00 sec)從: root@192.168.200.201 : rep_test 08:58:56>select * from test1; +----+------+ | id | name | +----+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +----+------+ 4 rows in set (0.00 sec)

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

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

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

另外補(bǔ)充:
要是從庫有的數(shù)據(jù),而主庫沒有,那這個(gè)數(shù)據(jù)怎么處理?在原先的基礎(chǔ)上,在從上添加一條5記錄。

root@zhoujy:~# pt-table-sync --replicate=rep_test.checksums --databases=rep_test,test --tables=test2,test1 h=127.0.0.1,u=root,p=123456 h=192.168.200.201,u=root,p=123456 --print DELETE FROM `rep_test`.`test1` WHERE `id`='5' LIMIT 1

/*percona-toolkit src_db:rep_test src_tbl:test1 src_dsn:h=127.0.0.1,p=...,u=root dst_db:rep_test dst_tbl:test1 dst_dsn:h=192.168.200.201,p=...,u=root lock:1 transaction:0 changing_src:rep_test.checksums replicate:rep_test.checksums bidirectional:0 pid:12343 user:root host:zhoujy*/;
REPLACE INTO `rep_test`.`test1`(`id`, `name`) VALUES ('3', 'c')

/*percona-toolkit src_db:rep_test src_tbl:test1 src_dsn:h=127.0.0.1,p=...,u=root dst_db:rep_test dst_tbl:test1 dst_dsn:h=192.168.200.201,p=...,u=root lock:1 transaction:0 changing_src:rep_test.checksums replicate:rep_test.checksums bidirectional:0 pid:12343 user:root host:zhoujy*/;

從上面可以看到,直接把從庫的有的數(shù)據(jù)給刪除了,沒有的數(shù)據(jù)進(jìn)行插入。這樣2邊又保持了 一致性。

要是在shell窗口不想顯示的輸入密碼則可以添加:--ask-pass 參數(shù),如:

zhoujy@zhoujy:~$ pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=rep_test.checksums --ask-pass --databases=rep_test --tables=test1,test2 h=127.0.0.1,u=root,P=3306 Enter MySQL password: TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE 05-09T13:57:04 0 1 4 1 0 0.015 rep_test.test1 05-09T13:57:04 0 1 1 1 0 0.010 rep_test.test2zhoujy@zhoujy:~$ pt-table-sync --replicate=rep_test.checksums --ask-pass h=127.0.0.1,u=root h=192.168.200.201,u=root --print Enter password for 127.0.0.1: Enter password for 192.168.200.201: DELETE FROM `rep_test`.`test1` WHERE `id`='5' LIMIT 1; REPLACE INTO `rep_test`.`test1`(`id`, `name`) VALUES ('4', 'd') ;

?總結(jié):
該工具檢查的表,需要檢查連接的帳號需要有很高的權(quán)限,在一般權(quán)限行需要加
SELECT, PROCESS, SUPER, REPLICATION SLAVE等權(quán)限,測試方便我直接給了ALL的權(quán)限,pt-table-checksum 和 pt-table-sync 一起互補(bǔ)使用,檢查一定是在同步操作之前,更多的信息請見 這里 這里、這里


?

總結(jié)

以上是生活随笔為你收集整理的percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产欧美一区二区三区在线 | 午夜免费福利影院 | 中文字幕久久久久 | 99资源在线 | 麻豆三级在线观看 | 精品肉丝脚一区二区三区 | 狂躁美女大bbbbbb黑人 | 欧美中文字幕在线 | 香蕉视频一区二区 | 国产精品高潮视频 | 日韩国产欧美视频 | 激情xxx | 欧美性视频一区二区 | 最新中文字幕久久 | 一及黄色大片 | 77久久| 中文久久精品 | 在线不卡av | 免费视频久久久 | 欧美福利视频在线 | 爱爱视频在线免费观看 | 中文字幕一区二区三区精华液 | 自宅警备员在线观看 | 国内老熟妇对白xxxxhd | 羞羞免费视频 | av美女在线观看 | 特黄色大片 | 秋霞毛片少妇激情免费 | 操操操影院 | av在线电影网站 | 国产高清无遮挡 | 中国人与拘一级毛片 | www日本www| 国产网友自拍 | 91精品在线免费观看 | 激情五月婷婷小说 | 欧美日韩一区二区电影 | 国产簧片 | 影音先锋在线看 | 五月花婷婷 | 国产老头和老头xxxx× | 美女免费福利视频 | 欧美一区二区三区在线免费观看 | 久久水蜜桃 | 白白色免费视频 | 国产精品网站入口 | 日韩电影一区二区在线观看 | 网友自拍av | 娇小萝被两个黑人用半米长 | 国产激情一区二区三区视频免樱桃 | 国产丝袜视频在线 | 日欧一级片 | 成人在线免费 | а√中文在线资源库 | 亚洲精品乱码久久久久久自慰 | 欧美毛片在线 | 国产精品区在线观看 | 国内精品国产三级国产aⅴ久 | 男人天堂b | 日韩一区免费视频 | 折磨小男生性器羞耻的故事 | 日本免费一区二区视频 | 暗呦丨小u女国产精品 | 狠狠干2022| 午夜亚洲 | 国产欧美网站 | 色图18p | 精品无码久久久久成人漫画 | jizz亚洲女人 | 第一章婶婶的性事 | 午夜黄视频 | 中文人妻av久久人妻18 | 国产精品电影一区二区 | 亚洲视频黄 | 性生交大全免费看 | 欧美专区在线播放 | 国产极品美女高潮无套在线观看 | 一区二区视屏 | 麻豆 美女 丝袜 人妻 中文 | 人妻视频一区二区三区 | 亚洲3p | 美女隐私无遮挡免费 | 国产精品伦一区二区 | 99色在线视频 | 三区在线观看 | 国产综合视频一区二区 | 亚洲熟女一区二区 | 嫩草一区二区 | 成人污在线观看 | 五月天久久综合 | 铠甲勇士猎铠 | 成人黄页 | 精品日韩一区二区三区 | 中文字幕精品一区久久久久 | 一级黄色a视频 | 韩日毛片| www.com毛片 | 亚洲天堂日韩在线 | 亚洲人体av |