在 macOS (宿主) 運行 MySQL Master,VirtualBox 虛擬機 Windows 7 (客體) 運行 MySQL Slave,利用 Windows 生態工具 管理、備份、監控。本文記錄網絡配置、主從搭建、坑點排查、最終驗證全過程。
192.168.1.100 (路由器綁定靜態)192.168.1.101 (橋接模式獲取獨立 IP)en0: Wi-Fi 或 eth0)ipconfig 確認獲取局域網 IP (如 192.168.1.101)ping 192.168.1.101、虛擬機 ping 192.168.1.100 雙向通暢

192.168.1.100,User/Port 正確
問題: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

# 編輯 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)

-- 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

| 錯誤現象 | 原因分析 | 解決方案 |
|---|---|---|
Got fatal error 1236 from master when reading data from binary log | Binlog 位點不匹配、Master Binlog 已過期清理、GTID 不一致 | 重新獲取 SHOW MASTER STATUS 位點,重新 CHANGE MASTER TO;或重新搭建 Slave |
Slave can not handle replication events with the checksum that master is configured to log | Master 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 鎖等待 |
my.cnf,需從 support-files 複製並添加 explicit_defaults_for_timestamp=1Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master、Last_Error 必須納入告警MASTER_AUTO_POSITION=1),簡化故障恢復rpl_semi_sync_master=1),提升數據安全性