MySQL主從資料一致性怎麼校驗
背景
新專案要上線了,資料庫採用的MySQL主從同步配置。為了確保上線前遷移的資料一致性,指定了多種預案,為了確保主從資料一致,使用了percona-toolkit 。
percona-toolkit源自Maatkit和Aspersa工具,這兩個工具是管理mysql的最有名的工具,現在Maatkit工具已經不維護了,請大家還是使用percona-toolkit吧!這些工具主要包括開發、效能、配置、監控、複製、系統、實用六大類,裡面的工具對DBA非常有用,如果能掌握並加以靈活應用,將能極大的提高工作效率。本文主要介紹percona-toolkit(以下簡稱PT)安裝過程及通過其檢查兩個庫的一致性及延遲率。
安裝過程
安裝Perl執行環境
PT是通過Perl語言編寫的,因此使用時首先要安裝Perl執行環境。
查詢依賴環境,命令如下:
rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL
接下來就是缺啥,安裝啥,用如下命令:
yum install perl-DBI yum install perl-DBD-MySQL yum install perl-Time-HiRes yum install perl-IO-Socket-SSL
PT下載
筆者通過wget方式獲取PT,發現下載速度很慢,推薦去官網找到下載連結,用下載工具進行下載。
安裝TermReadKey
在安裝PT前,要先安裝TermReadKey,否則會報錯,可以在下面的地址下載:
http://rpmfind.net/linux/RPM/dag/redhat/el5/x86_64/perl-TermReadKey-2.30-1.el5.rf.x86_64.html
執行一下命令,安裝TermReadKey
rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm
PT安裝
通過以下命令,對PT進行安裝
rpm -ivh percona-toolkit-3.3.0-1.el7.x86_64.rpm
成功安裝的校驗
1. 執行完安裝命令沒有提示出錯
2. 執行pt命令,例如pt-table-checksum,有命令提示
安裝注意事項
若安裝PT過程中報錯,提示
在MySQL8和MySQL5.7下親測,執行以下命令可以解決:
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
yum -y install rsync perl l perl-Digest-MD5
若報錯如下:
執行以下命令:
rpm -ivh mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm(版本按需調整)
主從是否一致的校驗
首先在各個庫中都要有checksums表
create database percona;
CREATE TABLE checksums ( db CHAR(64) NOT NULL, tbl CHAR(64) NOT NULL, chunk INT NOT NULL, chunk_time FLOAT NULL, chunk_index VARCHAR(200) NULL, lower_boundary TEXT NULL, upper_boundary TEXT NULL, this_crc CHAR(40) NOT NULL, this_cnt INT NOT NULL, master_crc CHAR(40) NULL, master_cnt INT NULL, ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (db, tbl, chunk), INDEX ts_db_tbl (ts, db, tbl) ) ENGINE=InnoDB;
執行以下命令對主從一致性進行檢查
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=percona.checksums --create-replicate-table --databases=目標庫 --tables=目標表 h=主庫IP,u=主庫使用者,p='主庫密碼',P=3306
看到以下結果,執行成功
結果說明:
ERRORS`:檢查時候發生錯誤和警告的數量。
`DIFFS`:0表示一致,1表示不一致。
當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的資訊。`
ROWS`:表的行數。
`CHUNKS`:被劃分到表中的塊的數目。
`SKIPPED`:由於錯誤或警告或過大,則跳過塊的數目。
`TIME`:執行的時間。
`TABLE`:被檢查的表名。