首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

CentOS 7 MySQL 5.7 主從同步極速部署:xtrabackup 熱備份 + GTID 模式

     編輯:MySQL 資料庫相關知識

環境與版本

  • OS:CentOS 7.9
  • MySQL:5.7.x (RPM 安裝)
  • 備份工具:Percona XtraBackup 2.4 / 8.0 (RPM)
  • 架構:一主一從,GTID 模式(5.6.5+ 支援)

1. Master 配置(/etc/my.cnf)

[mysqld]
server-id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-bin
log_slave_updates = ON
binlog_format = ROW
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
datadir = /var/lib/mysql
character-set-server = utf8mb4
init_connect = 'SET NAMES utf8mb4'

systemctl restart mysqld

2. Slave 配置(/etc/my.cnf)

[mysqld]
server-id = 2
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-bin
log_slave_updates = ON
binlog_format = ROW
datadir = /var/lib/mysql
character-set-server = utf8mb4
init_connect = 'SET NAMES utf8mb4'
# 可選:只讀模式防誤寫
super_read_only = ON

systemctl restart mysqld

3. Master 建立同步帳號

CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;

4. 熱備份傳輸(XtraBackup 流式傳輸,毫秒級鎖表)

# Master 執行:打包流式傳輸到 Slave
innobackupex --stream=xbstream --user=root --password='RootPass#2024' ./ \
  | ssh root@192.168.1.20 "xbstream -x -C /var/lib/mysql/"

# 或使用 tar(舊版)
innobackupex --stream=tar --user=root --password='RootPass#2024' ./ \
  | ssh root@192.168.1.20 "tar xfi - -C /var/lib/mysql/"

✅ **優勢**:無需停庫、鎖表時間僅需刷新日誌與複製 .frm/.ibd 元數據(通常 < 1 秒)。

5. Slave 恢復與權限修正

# 1. 準備備份(重做日誌應用)
innobackupex --apply-log /var/lib/mysql/

# 2. 修正擁有者
chown -R mysql:mysql /var/lib/mysql/

# 3. 啟動 MySQL
systemctl start mysqld

6. 建立 GTID 同步(無需手動指定 binlog 位點)

CHANGE MASTER TO
  MASTER_HOST = '192.168.1.10',
  MASTER_USER = 'repl',
  MASTER_PASSWORD = 'ReplPass#2024',
  MASTER_AUTO_POSITION = 1;  -- GTID 核心參數

START SLAVE;

7. 驗證同步狀態

SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Retrieved_Gtid_Set: xxxx
Executed_Gtid_Set: xxxx
Master_Server_Id: 1

常見問題速查

現象原因解決
Slave_IO_Running: Connecting網路/防火牆/帳號密碼/bind-addresstelnet master 3306、檢查安全組、驗證 repl 帳號
Slave_SQL_Running: No執行 relay log 報錯(主鍵衝突、字符集、外鍵)SHOW SLAVE STATUS\G 看 Last_SQL_Error,手工修復後 START SLAVE
Seconds_Behind_Master 偶發 NULLIO 線程斷開檢查網路抖動、master 超時設定 slave_net_timeout
GTID 集合不一致Slave 有額外寫入、或 Master 資料損壞重新同步或 SET GLOBAL gtid_purged=... 修正

遷移舊版(非 GTID)到 GTID

  1. Master 開啟 GTID 相關參數,重啟。
  2. Slave 同步開啟,重啟。
  3. 用 XtraBackup 重新建立 Slave 數據目錄。
  4. CHANGE MASTER TO MASTER_AUTO_POSITION=1 啟動同步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved