您好,登錄后才能下訂單哦!
這篇文章給大家介紹MYSQL 主從不一致如何解決,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
MYSQL 中主從不一致是很可能發生的,而怎么能發現不一致則并不是一個很簡單的問題。尤其對數據量較大的情況下。廢話說多無益,看下面的例子:
我們先建立一個存儲過程,來插入我們的初始化數據
delimiter //
DROP PROCEDURE IF EXISTS insert_test_val;
##num_limit 要插入數據的數量,rand_limit 最大隨機的數值
CREATE PROCEDURE insert_test_val()
BEGIN
DECLARE i int default 1;
DECLARE a varchar(20) ;
DECLARE b smallint ;
DECLARE c smallint ;
WHILE i<=1000000 do
set b = FLOOR(rand()*50);
set c = FLOOR(rand()*10);
if i mod 2 = 0 then
set a = 'peter';
elseif i mod 3 = 0 then
set a = 'jimmy';
elseif i mod 5 = 0 then
set a = 'Tim';
elseif i mod 4 = 0 then
set a = 'semon';
else
set a = 'lisa';
end if;
if b < 20 then
set b = b + 15;
end if;
INSERT into test.test values (null,a,b,c);
set i = i + 1;
END WHILE;
END
//
運行存儲過程插入數據, 在插入數據后,我們開始搞破壞了,我們將在從庫刪除一些數據。
然后我們開始運行 $ pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=test --replicate=test.checksums h=192.168.198.201,u=admin,p='1234.com',P=3306
注意:
1 每次pt-table-checksum 只能檢查一個表
2 檢查時不建議檢查binlog format 否則會報錯,pt-table-checksum 默認是要使用 statement 作為復制的方式
3 replicate 默認指定的表最好在需要鑒定數據是否一致的庫下,這樣在執行pt-table-sync 時候回比較方便。
4 給定檢測的連接數據庫的賬戶,應該具有建表或建庫的權限
其中pt-table-checksum 主要是將需要檢測的表(不是每行)通過塊的方式(多行組成的數據),進行檢測,通過CRC32的方式
通過命令檢測,發現相關表上有數據chunck 不一致,并且在檢測數據庫的位置,建立了checksums 表,來記錄相關的信息。
(相關的參數請查看官方文檔)
同時在主庫中在運行
pt-table-sync --replicate=test.checksums h=192.168.198.201,u=admin,p=1234.com,P=3306 h=192.168.198.202,u=admin,p=1234.com,P=3306 --print > /data/fix.sql
在導出SQL 后在相關的從庫導入
然后回到主庫,清理checksums 表,然后在執行一遍命令,在查看chekcsums表,可以很清晰的看到,每個chunk 的值都是相等的。
可以看到修復差異的數據是可以的。
剛才僅僅是數據不同(數據缺失),如果里面的數據并沒有缺失,僅僅是里面的值變化了,會不會無法使用這個工具,答案是不可能
我們可以試試,從庫修改name 值
截圖中我們修改了NAME 的值
我們還是通過剛才的命令,可以清晰的看到,相關的修改的記錄可以被找到并且可以被修復。
所以到目前為止,通過PT工具來修復主從不一致的方法還是很奏效的,但如果你大多數表都不一致了,那還是建議從做一次主從復制比較高效。
另外,MYSQL 提供一個 checksum table 的命令,也能快速的判斷一個表和另一個表之間是否不相同。 注意這里用的是 不相同,通過官方的文提示兩個不一樣的table 也是有可能產生一致的值,當然這樣的概率會比較低。
關于MYSQL 主從不一致如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。