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

Linux MySQL 單向主從同步配置全流程:binlog-do-db、replicate-do-db、手動定位點

     編輯:MySQL 資料庫相關知識

架構與前提

  • Master:192.168.0.88(寫入)
  • Slave:192.168.0.99(唯讀/備份)
  • **版本必須一致**(如均為 5.7.38)
  • 同步庫:kangte;不同步:mysql 系統庫

Master 配置(/etc/my.cnf)

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = kangte
binlog-ignore-db = mysql
# 可選:ROW 格式減少衝突
binlog_format = ROW
systemctl restart mysqld

Master 建立同步帳號並獲取定位點

CREATE USER 'kt'@'192.168.0.99' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT, RELOAD, SUPER ON *.* TO 'kt'@'192.168.0.99' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 鎖表獲取一致性位點
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 記錄 File、Position(例:mysql-bin.000006, 656)

-- 導出同步庫
mysqldump -u root -p kangte > /tmp/kangte.sql

-- 解鎖
UNLOCK TABLES;

-- 傳輸到 Slave
scp /tmp/kangte.sql root@192.168.0.99:/tmp/

Slave 配置(/etc/my.cnf)

[mysqld]
server-id = 2
master-host = 192.168.0.88
master-user = kt
master-password = 123456
master-port = 3306
master-connect-retry = 60
replicate-do-db = kangte
replicate-ignore-db = mysql
systemctl restart mysqld

Slave 初始化數據並指定同步起點

# 1. 停止 Slave 線程(防止自動啟動)
systemctl stop mysqld
# 或啟動時加參數
mysqld_safe --skip-slave-start &

# 2. 建庫並導入
mysql -u root -p -e "CREATE DATABASE kangte;"
mysql -u root -p kangte < /tmp/kangte.sql

# 3. 指定 Master 定位點(必須在 START SLAVE 前)
mysql -u root -p -e "
CHANGE MASTER TO
  MASTER_HOST = '192.168.0.88',
  MASTER_USER = 'kt',
  MASTER_PASSWORD = '123456',
  MASTER_LOG_FILE = 'mysql-bin.000006',
  MASTER_LOG_POS = 656;
"

# 4. 啟動同步
mysql -u root -p -e "START SLAVE;"

# 5. 驗證
mysql -u root -p -e "SHOW SLAVE STATUS\G"
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes

命令列純手工部署(無配置檔依賴)

# Master
mysql> GRANT REPLICATION SLAVE ON *.* TO 'xu'@'192.168.1.121' IDENTIFIED BY '123456';
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;  -- 記錄 File, Position
# mysqldump 導出 test 庫
mysql> UNLOCK TABLES;

# Slave
mysql> CHANGE MASTER TO
  MASTER_HOST='192.168.1.120',
  MASTER_USER='xu',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=123;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G

關鍵注意事項

  1. ⚠️ **binlog-do-db / replicate-do-db 僅對默認庫生效**,跨庫操作(如 INSERT INTO db1.t SELECT * FROM db2.t)可能不同步,建議用 **ROW 格式 + 不做庫過濾**,應用層控制寫入庫。
  2. ⚠️ **Slave 導入前必須先 CREATE DATABASE**,否則報錯 "Unknown database"。
  3. ⚠️ **CHANGE MASTER TO 必須在 START SLAVE 前執行**,否則報錯 "Cannot change master while slave running"。
  4. ⚠️ 5.6+ 建議改用 **GTID 模式**(參考 74700 文章),免去手動位點維護。
  5. 📌 監控腳本:定時檢查 Seconds_Behind_Master、Slave_*_Running、Last_Error。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved