pt工具主從一致性檢查並修複以及版本3.0.4的版本缺點

来源:https://www.cnblogs.com/liyingxiao/archive/2018/03/21/8619190.html
-Advertisement-
Play Games

pt-table-checksum和pt-table-sync分別檢驗master-slave的數據不一致並修複。 1、本次測試環境 2、 3、開始檢測差異 1)創建一個用戶,可以訪問master和slave,master上執行如下的創建用戶命令 構造master-slave的差異環境,slave同 ...


   pt-table-checksum和pt-table-sync分別檢驗master-slave的數據不一致並修複。

1、本次測試環境

 1 [root@172-16-3-190 we_ops_admin]# cat /etc/redhat-release 
 2 CentOS release 6.8 (Final)
 3 [root@172-16-3-190 we_ops_admin]# /opt/app/mysql_3309/bin/mysqladmin --version
 4 /opt/app/mysql_3309/bin/mysqladmin  Ver 8.42 Distrib 5.6.20-68.0, for Linux on x86_64
 5 [root@172-16-3-190 we_ops_admin]# pt-table-checksum --version
 6 pt-table-checksum 3.0.4
 7 
 8 master1:172.16.3.190 basedir:/opt/app/mysql_3309/  datadir:/opt/app/mysql_3309/data port:3309 
 9 slave1:172.16.3.189 basedir:/opt/app/mysql_3309/  datadir:/opt/app/mysql_3309/data port:3309
10 master&slave:binlog_format=mixed

2、

 1 ----測試表aa結構
 2 CREATE TABLE `aa` (
 3   `aa` varchar(1) DEFAULT '',
 4   `bb` varchar(1) DEFAULT NULL,
 5   `id` int(11) NOT NULL,
 6   PRIMARY KEY (`id`)
 7 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
 8 
 9 ----master上表數據
10 mysql> select * from aa;
11 +------+------+----+
12 | aa   | bb   | id |
13 +------+------+----+
14 | 1    | 1    |  1 |
15 | 2    | 2    |  2 |
16 | 5    | 2    |  5 |
17 +------+------+----+
18 3 rows in set (0.00 sec)
19 
20 ----slave上表數據
21 mysql> select * from aa;
22 +------+------+----+
23 | aa   | bb   | id |
24 +------+------+----+
25 | 2    | 2    |  2 |
26 | 4    | 4    |  4 |
27 | 5    | 5    |  5 |
28 +------+------+----+
29 3 rows in set (0.00 sec)
3、開始檢測差異 1)創建一個用戶,可以訪問master和slave,master上執行如下的創建用戶命令

 構造master-slave的差異環境,slave同步master數據後,人為修改slave數據使得不一致。

1 grant all privileges on *.* to 'checksums'@'172.16.%.%' identified by 'checksums'
2 Query OK, 0 rows affected (0.00 sec)

2)pt-table-checksum檢測差異,並寫入差異到checksums表中,master上執行

1 [root@172-16-3-190 we_ops_admin]# /usr/bin/pt-table-checksum --create-replicate-table --replicate=ceshi.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-method=processlist --databases=ceshi --user=checksums --password=checksums -h172.16.3.190 --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309
2             TS ERRORS  DIFFS    ROWS  CHUNKS SKIPPED    TIME TABLE
3 01-30T10:26:44      0      0        3      1      0  0.042 ceshi.aa
pt-table-checksum 3.0.4的bug,功能缺乏,binlog_format格式非statement格式檢測不出來差異   DIFFS=0表示沒有差異數據。實際上主從數據不一致,我們已經加入了參數--nocheck-binlog-format,這裡卻沒有檢測出來。為什麼沒有檢測出來呢?
 pt-table-checksum針對的binlog_format=statement的格式,根據pt-table-checksum的原理,它在執行的時候,沒有將會話級別的binlog_format=statement設置成功,那我們只能手動將動態參數binlog_format設置為statement模式。   只有在statement格式下才能進行,因為兩邊要計算CRC32,計算完後再把主上的master_crc、master_cnt更新到從庫,最後在從庫對比master和this相關列,也就是說從庫不會去計算所謂的CRC32,它直接完整copy主庫的checksums的所有內容。pt-table-checksum 3.0.4在執行時缺少SET@@binlog_format='STATEMENT',建議不要使用。   有一種很挫的方法,僅僅是為了看差異結果(生產環境勿用),執行pt-table-checksum前,在主上 set global binlog_format='STATEMENT'。
1 master上執行
2 mysql> set @@global.binlog_format=statement;
3 Query OK, 0 rows affected (0.00 sec)
4 
5 slave上執行
6 mysql> set @@global.binlog_format=statement;
7 Query OK, 0 rows affected (0.00 sec)

master上再次執行,發現DIFFS的值終於為1,表示已經檢測到master-slave數據的不一致了

1 [root@172-16-3-190 we_ops_admin]# /usr/bin/pt-table-checksum --create-replicate-table --replicate=ceshi.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-method=processlist --databases=ceshi --user=checksums --password=checksums -h172.16.3.190 --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309
2             TS ERRORS  DIFFS    ROWS  CHUNKS SKIPPED    TIME TABLE
3 01-30T11:02:15      0      1        3      1      0  0.026 ceshi.aa
4、pt-table-sync修複master-slave數據不一致,master和slave都可以進行修複命令的執行 1)master上執行,--print列印出修複的sql語句。參數--sync-to-master參數在master上執行必須有,否則列印不出差異sql。
[root@172-16-3-190 we_ops_admin]# pt-table-sync --sync-to-master --replicate=ceshi.checksums -h172.16.3.190 --user=checksums --password=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 h=172.16.3.189,u=checksums,p=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 --print  
DELETE FROM `ceshi`.`aa` WHERE `id`='4' LIMIT 1 /*percona-toolkit src_db:ceshi src_tbl:aa src_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.190,p=...,u=checksums dst_db:ceshi dst_tbl:aa dst_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.189,p=...,u=checksums lock:1 transaction:1 changing_src:ceshi.checksums replicate:ceshi.checksums bidirectional:0 pid:13528 user:root host:172-16-3-190*/;
REPLACE INTO `ceshi`.`aa`(`aa`, `bb`, `id`) VALUES ('1', '1', '1') /*percona-toolkit src_db:ceshi src_tbl:aa src_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.190,p=...,u=checksums dst_db:ceshi dst_tbl:aa dst_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.189,p=...,u=checksums lock:1 transaction:1 changing_src:ceshi.checksums replicate:ceshi.checksums bidirectional:0 pid:13528 user:root host:172-16-3-190*/;
REPLACE INTO `ceshi`.`aa`(`aa`, `bb`, `id`) VALUES ('5', '2', '5') /*percona-toolkit src_db:ceshi src_tbl:aa src_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.190,p=...,u=checksums dst_db:ceshi dst_tbl:aa dst_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.189,p=...,u=checksums lock:1 transaction:1 changing_src:ceshi.checksums replicate:ceshi.checksums bidirectional:0 pid:13528 user:root host:172-16-3-190*/;

 slave上再次構造差異並執行修複命令 

 1 ---slave上執行
 2 mysql> update aa set id = 4 where aa = 5;
 3 Query OK, 1 row affected (0.00 sec)
 4 Rows matched: 1  Changed: 1  Warnings: 0
 5 
 6 ----master上執行檢測
 7 [root@172-16-3-190 we_ops_admin]# /usr/bin/pt-table-checksum --create-replicate-table --replicate=ceshi.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-method=processlist --databases=ceshi --user=checksums --password=checksums -h172.16.3.190 --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309
 8 
 9 # A software update is available:
10             TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
11 01-30T15:12:27      0      1        3       1       0   0.025 ceshi.aa
12 
13 ----slave上執行數據修複
14 [root@172-16-3-189 we_ops_admin]#  pt-table-sync --sync-to-master --replicate=ceshi.checksums -h172.16.3.190 --user=checksums --password=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 h=172.16.3.189,u=checksums,p=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 --print  
15 DELETE FROM `ceshi`.`aa` WHERE `id`='4' LIMIT 1 /*percona-toolkit src_db:ceshi src_tbl:aa src_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.190,p=...,u=checksums dst_db:ceshi dst_tbl:aa dst_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.189,p=...,u=checksums lock:1 transaction:1 changing_src:ceshi.checksums replicate:ceshi.checksums bidirectional:0 pid:23321 user:root host:172-16-3-189*/;
16 REPLACE INTO `ceshi`.`aa`(`aa`, `bb`, `id`) VALUES ('5', '2', '5') /*percona-toolkit src_db:ceshi src_tbl:aa src_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.190,p=...,u=checksums dst_db:ceshi dst_tbl:aa dst_dsn:P=3309,S=/opt/app/mysql_3309/tmp/mysql.sock,h=172.16.3.189,p=...,u=checksums lock:1 transaction:1 changing_src:ceshi.checksums replicate:ceshi.checksums bidirectional:0 pid:23321 user:root host:172-16-3-189*/;
17 
18 [root@172-16-3-189 we_ops_admin]#  pt-table-sync --sync-to-master --replicate=ceshi.checksums -h172.16.3.190 --user=checksums --password=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 h=172.16.3.189,u=checksums,p=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 --execute
19 
20 [root@172-16-3-189 we_ops_admin]# 3309.sh 
21 Warning: Using a password on the command line interface can be insecure.
22 Welcome to the MySQL monitor.  Commands end with ; or \g.
23 Your MySQL connection id is 223
24 Server version: 5.6.20-68.0-log Percona Server (GPL), Release 68.0, Revision 656
25 
26 Copyright (c) 2009-2014 Percona LLC and/or its affiliates
27 Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
28 
29 Oracle is a registered trademark of Oracle Corporation and/or its
30 affiliates. Other names may be trademarks of their respective
31 owners.
32 
33 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
34 
35 mysql> select * from aa;
36 ERROR 1046 (3D000): No database selected
37 mysql> use ceshi;
38 Reading table information for completion of table and column names
39 You can turn off this feature to get a quicker startup with -A
40 
41 Database changed
42 mysql> select * from aa;
43 +------+------+----+
44 | aa  | bb  | id |
45 +------+------+----+
46 | 1    | 1    |  1 |
47 | 2    | 2    |  2 |
48 | 5    | 2    |  5 |
49 +------+------+----+
50 3 rows in set (0.00 sec)

2)--execute執行修複語句

1 [root@172-16-3-190 we_ops_admin]# pt-table-sync --sync-to-master --replicate=ceshi.checksums -h172.16.3.190 --user=checksums --password=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 h=172.16.3.189,u=checksums,p=checksums --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309 --execute

3)驗證master和slave數據不一致性是否修複,經檢驗數據一致

 1 ----master上表aa數據
 2 mysql> select * from ceshi.aa;
 3 +------+------+----+
 4 | aa  | bb  | id |
 5 +------+------+----+
 6 | 1    | 1    |  1 |
 7 | 2    | 2    |  2 |
 8 | 5    | 2    |  5 |
 9 +------+------+----+
10 3 rows in set (0.00 sec)
11 
12 ----slave上表aa數據
13 mysql> select * from ceshi.aa;
14 +------+------+----+
15 | aa  | bb  | id |
16 +------+------+----+
17 | 1    | 1    |  1 |
18 | 2    | 2    |  2 |
19 | 5    | 2    |  5 |
20 +------+------+----+
21 3 rows in set (0.00 sec)

再次利用工具運行,檢測master-slave數據一致性

1 [root@172-16-3-190 we_ops_admin]# /usr/bin/pt-table-checksum --create-replicate-table --replicate=ceshi.checksums --nocheck-replication-filters --nocheck-binlog-format --recursion-method=processlist --databases=ceshi --user=checksums --password=checksums -h172.16.3.190 --socket=/opt/app/mysql_3309/tmp/mysql.sock --port=3309
2             TS ERRORS  DIFFS    ROWS  CHUNKS SKIPPED    TIME TABLE
3 01-30T14:50:43      0      0        3      1      0  0.038 ceshi.aa

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於: Mini2440 開發板, Linux 3.4.2 內核 ASOC 簡介: ~~~~ ASoC ALSA System on Chip,是建立在標準ALSA驅動層上,為了更好地支持嵌入式處理器和移動設備中音頻 Codec 的一套軟體體系。 就像軟體領域里的抽象和重用一樣,嵌入式設備的音頻系統 ...
  • 本文所述的方法在RHEL6.5、RHEL7和CentOS6.5中同樣適用。 1.工具:VirtualBox,虛擬機:CentOS7 2.VirtualBox工具中的網路配置 (1)VirtualBox全局設置:管理——>全局設定——>網路——>僅主機(host-only) 註:因為我本次配置是要搭建 ...
  • 原文鏈接:http://blog.csdn.net/qq_38646470/article/details/79643000 編程人員很喜歡的編輯器:vim 先搞清楚vim的三種模式: 1.命令模式:在Linux終端中輸入“vim 文件名”就進入了命令模式,但不能輸入文字。 2.編輯模式:在命令模式 ...
  • 1、複製/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問許可權。 2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號; ...
  • 貼上內容來源https://www.cnblogs.com/Alier/p/6358447.html 1 備份原來的更新源 2 修改更新源 打開sources.list (這就是存放更新源的文件) 將下麵所有內容複製,粘貼並覆蓋sources.list文件中的所有內容 3 讓更新源生效 ...
  • 本文收錄在Linux運維企業架構實戰系列 做了幾周的測試,踩了無數的坑,總結一下,全是乾貨,給大家分享~ 一、elk 實用知識點總結 1、編碼轉換問題(主要就是中文亂碼) (1)input 中的codec => plain 轉碼 將GB2312 的文本編碼,轉為UTF-8 的編碼 (2)也可以在fi ...
  • SecureCRT 是一款非常好用的遠程終端連接軟體,且支持 Windows/Linux/macOS 全平臺。由於現在工作平臺主要在 Linux 系統上,SecureCRT 也是必備軟體。一開始安裝的是 Ubuntu 16.04 LTS,但用了了一段時間還是不喜歡 Unity 的界面,自己也是一個喜 ...
  • 本文為mariadb官方手冊:SET Variable的譯文。 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/set-variable/ 語法 存儲程式stored ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...