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

Ubuntu MySQL 主從熱備份部署實戰手冊

     編輯:MySQL 資料庫相關知識

環境規劃

角色IPServer ID備註
Master192.168.137.121讀寫、啟用 Binlog
Slave192.168.137.132唯讀、同步指定庫

步驟 1:安裝與基礎配置(雙節點同步執行)

sudo apt-get update && sudo apt-get install -y mysql-server
# 設定 root 密碼、移除匿名帳號、禁止 root 遠端登入、移除 test 庫
sudo mysql_secure_installation

字元集統一為 utf8mb4

# /etc/mysql/mysql.conf.d/mysqld.cnf (或 my.cnf)
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake

重啟:sudo systemctl restart mysql

步驟 2:Master 配置啟用 Binlog

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW          # 推薦 ROW 格式,減少主從不一致
binlog-do-db = s3            # 僅同步 s3 庫(可多行或用 replicate-do-db 在 Slave 控制)
expire_logs_days = 7         # 自動清理舊 Binlog
max_binlog_size = 100M

重啟 Master:sudo systemctl restart mysql

步驟 3:建立同步專用帳號

CREATE USER 'repl'@'192.168.137.%' IDENTIFIED BY 'StrongReplPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.137.%';
FLUSH PRIVILEGES;

安全提示:限制來源 IP 段、使用強密碼、專用帳號最小權限。

步驟 4:取得 Master 同步座標

FLUSH TABLES WITH READ LOCK;          # 短暫鎖定確保一致性座標
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      106 | s3           |                  |
+------------------+----------+--------------+------------------+
UNLOCK TABLES;

記錄 File 與 Position,後續 Slave 配置需用。

步驟 5:Slave 配置

[mysqld]
server-id = 2
relay-log = relay-bin
read-only = ON
replicate-do-db = s3
master-connect-retry = 60

重啟 Slave:sudo systemctl restart mysql

步驟 6:初始化 Slave 資料(兩種方式擇一)

方式 A:全新建立(資料量小)

# Master
mysqldump -u root -p --single-transaction --master-data=2 --databases s3 > s3_dump.sql
# 複製到 Slave
mysql -u root -p < s3_dump.sql

方式 B:實體備份(資料量大,需停 Master 或用 Percona XtraBackup 熱備)

# Master 停服務或 FLUSH TABLES WITH READ LOCK
tar czf /tmp/mysql_data.tar.gz /var/lib/mysql
# 複製到 Slave 解壓覆蓋 /var/lib/mysql,修正權限 chown -R mysql:mysql /var/lib/mysql

步驟 7:啟動同步

CHANGE MASTER TO
  MASTER_HOST='192.168.137.12',
  MASTER_USER='repl',
  MASTER_PASSWORD='StrongReplPass!',
  MASTER_LOG_FILE='mysql-bin.000007',
  MASTER_LOG_POS=106,
  MASTER_CONNECT_RETRY=60;

START SLAVE;
SHOW SLAVE STATUS\G

步驟 8:驗證同步健康度

關鍵指標均為 Yes:

  • Slave_IO_Running: Yes(I/O 執行緒連線 Master 正常)
  • Slave_SQL_Running: Yes(SQL 執行緒重放 Relay Log 正常)
  • Seconds_Behind_Master: 0(無延遲)
  • Last_IO_Error、Last_SQL_Error 為空

常見故障與排查

現象可能原因處置
IO_Running=Connecting網路不通、防火牆、帳號密碼錯、Master 未啟用 Binlogtelnet master 3306、檢查錯誤日誌 /var/log/mysql/error.log
SQL_Running=No主從資料不一致、觸發器/存儲過程非確定性、DDL 衝突檢查 Last_SQL_Error、若非關鍵可 SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 跳過
Seconds_Behind_Master 偏大Slave 機能不足、長事務、大量 DML、網路延遲升級 Slave 硬體、優化慢 SQL、改用並行複寫 slave_parallel_workers
Binlog 格式不一致Master ROW、Slave 無法解析統一 binlog-format=ROW

進階強化(生產環境建議)

  • GTID 複寫(MySQL 5.6+):gtid_mode=ON, enforce_gtid_consistency=ON,自動定位座標、支援故障自動轉移(MHA/Orchestrator)。
  • 半同步複寫:rpl_semi_sync_master=ON,降低資料遺失風險(RPO 近乎 0)。
  • 多源複寫/延遲從庫:延遲 1 小時的 Slave 作為邏輯錯誤回滾基準。
  • 監控告警:Prometheus + mysqld_exporter 采集 Slave_running、Seconds_Behind_Master、Slave_last_io_error,配置 Grafana 儀表板與 Alertmanager 告警。

結語

主從複寫是 MySQL 高可用與讀寫分離的基石。嚴格遵循Server ID 唯一、Binlog 格式統一、專用同步帳號、資料一致性初始化、關鍵指標監控五大原則,並引入 GTID、半同步、自動故障轉移工具鏈,即可構建穩健可靠的 MySQL 叢集。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved