首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

macOS 上構建 MySQL 主從同步實戰:VirtualBox + Windows 7 客戶機方案

     編輯:MySQL 綜合教學

macOS 上構建 MySQL 主從同步實戰:VirtualBox + Windows 7 客戶機方案

在 macOS (宿主) 運行 MySQL Master,VirtualBox 虛擬機 Windows 7 (客體) 運行 MySQL Slave,利用 Windows 生態工具 管理、備份、監控。本文記錄網絡配置、主從搭建、坑點排查、最終驗證全過程。

一、架構設計

  • Master:macOS 宿主機 MySQL 5.7+,IP: 192.168.1.100 (路由器綁定靜態)
  • Slave:VirtualBox Win7 客體 MySQL 5.6,IP: 192.168.1.101 (橋接模式獲取獨立 IP)
  • 工具:Win7 內使用 SQLyog 連接 Master/Slave,進行同步監控、備份導出

二、VirtualBox 網絡配置:橋接模式

  1. 虛擬機關機狀態 → 設置 → 網絡 → 网卡 1
  2. 連接方式:橋接網卡
  3. 界面名稱:選擇宿主機物理網卡 (如 en0: Wi-Fi 或 eth0)
  4. 啟動虛擬機,Win7 內 ipconfig 確認獲取局域網 IP (如 192.168.1.101)
  5. 宿主機 ping 192.168.1.101、虛擬機 ping 192.168.1.100 雙向通暢

VirtualBox橋接設置 網卡選擇

三、SQLyog 連接驗證

  1. Win7 內安裝 SQLyog
  2. 新建連接:Host 填宿主機 IP 192.168.1.100,User/Port 正確
  3. 測試連接成功,可瀏覽 Master 數據庫、導出備份

SQLyog連接Master

四、MySQL 主從配置

1. Master (macOS) 配置

問題:macOS MySQL 5.7 安裝後無 my.cnf,需手動創建。

# 複製默認配置模板
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

# 編輯 /etc/my.cnf,添加/修改 [mysqld] 節點
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
explicit_defaults_for_timestamp = 1  # 5.7 必需,否則啟動報錯

# 重啟服務
# 偏好設置面板 Stop → Start,或
sudo /usr/local/mysql/support-files/mysql.server restart

Master配置

2. Slave (Win7) 配置

# 編輯 my.ini (通常在 MySQL 安裝目錄或 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini)
[mysqld]
server-id = 2
relay-log = relay-bin
log-slave-updates = 1
read-only = 1
# binlog-format = ROW  # 與 Master 一致
# gtid-mode = ON       # 5.6 不支持 GTID,留待升級

# 重啟服務 (服務管理器或 net stop/start mysql)

Slave配置

3. 建立同步賬號與啟動同步

-- Master 上創建同步賬號
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;

-- 查看 Master 狀態
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 16093    |              |                  |
+------------------+----------+--------------+------------------+

-- Slave 上配置同步源並啟動
CHANGE MASTER TO
    MASTER_HOST = '192.168.1.100',
    MASTER_USER = 'repl',
    MASTER_PASSWORD = 'ReplPass123!',
    MASTER_LOG_FILE = 'mysql-bin.000002',
    MASTER_LOG_POS = 16093;
    -- MASTER_AUTO_POSITION = 1;  # GTID 模式 (5.7+)

START SLAVE;

-- 查看 Slave 狀態
SHOW SLAVE STATUS\G
-- 關鍵指標:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0

Master狀態 Slave狀態

五、坑點排查實錄

錯誤現象原因分析解決方案
Got fatal error 1236 from master when reading data from binary logBinlog 位點不匹配、Master Binlog 已過期清理、GTID 不一致重新獲取 SHOW MASTER STATUS 位點,重新 CHANGE MASTER TO;或重新搭建 Slave
Slave can not handle replication events with the checksum that master is configured to logMaster 5.6+ 默認 binlog_checksum=CRC32,Slave 版本過低不支持Master 設置 binlog_checksum=NONE,或升級 Slave
Slave 狀態正常,但數據不同步SQLyog 在 Master 插入數據未同步;SHOW PROCESSLIST 顯示 Slave SQL 線程 Sleep核心發現:使用 SQLyog (Win7) 向 Master 寫入數據未同步;但在 macOS 終端直接 mysql -e "INSERT..." 卻能同步!
Slave SQL 線程長期 Sleep可能原因:Binlog 格式不兼容、事務隔離級別、網絡延遲導致 Binlog 傳輸阻塞、slave_parallel_workers 配置問題未徹底根因定位,但繞過 SQLyog 直接在 Master 命令行寫入可恢復同步。建議:排查 Binlog 格式、檢查 Seconds_Behind_Master 波動、監控 SHOW ENGINE INNODB STATUS 鎖等待

六、關鍵經驗總結

  1. 網絡先行:VirtualBox 必須用橋接模式,雙向 Ping 通,路由器綁定靜態 IP
  2. 配置文件陷阱:macOS MySQL 無默認 my.cnf,需從 support-files 複製並添加 explicit_defaults_for_timestamp=1
  3. 版本兼容:Master 5.7 / Slave 5.6 可行,但 GTID、Checksum、Binlog 格式需對齊
  4. 工具副作用:SQLyog 等 GUI 工具可能隱式開啟事務、使用特定會話變量,導致 Binlog 事件異常。驗證同步請用命令行原生客戶端
  5. 監控指標:Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master、Last_Error 必須納入告警
  6. 備份先行:搭建同步前對 Master 做全量備份 (xtrabackup/mysqldump),Slave 由備份恢復,再接入同步,避免位點混亂

七、後續優化方向

  • 升級 Slave 至 5.7+,啟用 GTID (MASTER_AUTO_POSITION=1),簡化故障恢復
  • 配置半同步複刻 (rpl_semi_sync_master=1),提升數據安全性
  • 引入 Orchestrator / MHA 實現自動故障轉移
  • 監控接入 Prometheus + Grafana,可視化同步延遲、錯誤率、Binlog 增長率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved