MySQL 8.4 非 GTID 模式部分數據庫主從復制指南
在進行MySQL 8.4非GTID模式下部分數據庫主從復制時,以下是詳細的操作步驟以及對應的執行位置說明,還有報錯處理方法介紹:
操作步驟
1. 備份主庫指定數據庫(db1、db2)(主服務器上執行)
mkdir -p /backup
chown mysql:mysql /backup
mysqldump -u root -p --single-transaction --master-data=2 --databases db1 db2 --set-gtid-purged=OFF > /backup/partial_dump.sql
--single-transaction
:此參數可避免在備份過程中對數據表進行鎖定,保障數據庫正常讀寫不受影響。--master-data=2
:用于記錄主庫的binlog位置信息,會以注釋形式添加到備份文件中,方便后續配置使用。--set-gtid-purged=OFF
:鑒于采用的是非GTID模式,設置該參數為OFF
可禁用與GTID相關的內容輸出,防止后續出現不必要干擾。
2. 停止從庫復制(從服務器上執行)
STOP REPLICA;
注意這里使用的是MySQL 8.0及以上版本規范的語法來停止從庫的復制進程。
3. 清理從庫(可選,從服務器上執行)
DROP DATABASE IF EXISTS db1;
DROP DATABASE IF EXISTS db2;
此操作需謹慎進行,因為執行后會刪除對應數據庫中的所有數據,要提前確認好或者做好額外備份,避免數據丟失。
4. 傳輸備份文件(主服務器上執行)
scp /backup/partial_dump.sql 從服務器用戶名@從服務器IP:/backup/
執行該命令時,要確保從服務器已開啟相應的文件傳輸服務(如ssh
服務),并且接收端的“從服務器用戶名”對目標目錄/backup/
具備寫入權限,這樣才能成功傳輸備份文件。
5. 從庫恢復備份(從服務器上執行)
mysql -u root -p < /backup/partial_dump.sql
通過此命令,能將接收到的備份文件中的數據庫結構與數據完整導入到從庫中,為后續配置主從復制奠定數據基礎。
6. 配置從庫復制(從服務器上執行)
首先,查看binlog位置:
grep -A1 "CHANGE MASTER TO" /backup/partial_dump.sql
通過這條命令,我們可以從備份文件中查找之前記錄的主庫 binlog 位置信息,這些信息后續會配置到從庫的主從復制設置中。
接著,配置主庫連接信息:
-- 配置主庫連接信息(在從服務器上執行)
CHANGE REPLICA TO MASTER_HOST='192.168.73.110', -- 主庫IP,這里需要替換為實際的主庫IP地址MASTER_USER='repluser', -- 復制用戶,要提前在主庫創建好用于復制的用戶,并賦予相應權限MASTER_PASSWORD='centos', -- 復制用戶密碼,確保密碼正確且保密MASTER_PORT=3306, -- 主庫端口,通常MySQL默認端口是3306,若有修改則填實際端口MASTER_LOG_FILE='mysql-bin.000003', -- 從grep結果中獲取對應的binlog文件名MASTER_LOG_POS=245, -- 從grep結果中獲取對應的binlog位置坐標MASTER_RETRY_COUNT=10; -- 連接重試次數,設置合適的重試次數以應對可能出現的網絡等問題導致的連接失敗-- 指定復制的數據庫(在從服務器上執行)
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);
配置時,務必準確填寫各項參數,像主庫IP、用于復制的用戶及其密碼等關鍵信息都要確保無誤,以此保障從庫能順利連接主庫進行數據復制,同時通過CHANGE REPLICATION FILTER
語句明確指定只對db1
和db2
這兩個數據庫進行復制操作。
7. 啟動從庫復制(從服務器上執行)
START REPLICA;
遵循MySQL 8.0及以上版本的語法規范來啟動從庫的復制進程。
8. 驗證復制狀態(從服務器上執行)
SHOW REPLICA STATUS
查看輸出結果時,重點留意以下兩項是否顯示為Yes
:
Replica_IO_Running
:若該項為Yes
,表明從庫的I/O線程運行正常,可從主庫讀取binlog日志文件。Replica_SQL_Running
:該項為Yes
意味著從庫的SQL線程運行正常,能將讀取到的binlog內容解析并應用到從庫中,保證數據的一致性。
若這兩項中任何一項顯示為No
,就需要進一步排查諸如網絡連接、主從庫配置參數以及權限設置等方面是否存在問題。
報錯處理方法
方法1. 跳過指定數量的事務(從服務器上執行)
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql>slave start
可根據實際情況,按需修改跳過的事務數量,該方法適用于確定某個事務導致復制中斷且可跳過此事務的情形。
方法2. 修改配置文件跳過錯誤(從服務器上執行,需重啟MySQL服務)
vi /etc/my.cnf
在[mysqld]
配置項下面添加以下內容:
#slave-skip-errors=1062,1053,1146 (跳過指定類型錯誤,可按實際報錯的錯誤編號填寫)
slave-skip-errors=all (跳過所有錯誤,需謹慎使用,可能會掩蓋潛在問題,導致數據不一致等情況)
添加配置后,要重啟MySQL服務使配置生效。不過要特別強調,跳過所有錯誤這種方式屬于極端做法,一般建議優先排查清楚錯誤原因,實在無法解決且明確對數據影響不大時再考慮使用。