兩台異地 Linux 伺服器互為 Master/Slave,實現雙向同步,單點故障自動切換。
ServA (10.240.136.9) <---> ServB (10.240.136.149)
Master/Slave Master/Slave
-- ServA 執行
GRANT ALL PRIVILEGES ON *.* TO 'tongbu'@'10.240.136.149' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
-- ServB 執行
GRANT ALL PRIVILEGES ON *.* TO 'tongbu'@'10.240.136.9' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
[mysqld]
default-character-set = utf8
log-bin = mysql-bin
relay-log = relay-bin
relay-log-index = relay-bin-index
server-id = 1 # ServA=1, ServB=2
master-host = 10.240.136.149 # 對方 IP
master-user = tongbu
master-password = 123456
master-port = 3306
master-connect-retry = 30
binlog-do-db = umsdb
replicate-do-db = umsdb
replicate-ignore-table = umsdb.boco_tb_menu
replicate-ignore-table = umsdb.boco_tb_connect_log
replicate-ignore-table = umsdb.boco_tb_data_stat
replicate-ignore-table = umsdb.boco_tb_log_record
replicate-ignore-table = umsdb.boco_tb_workorder_record
slave-net-timeout = 60 # 關鍵:網路中斷 60 秒後重連,防假死
service mysqld restartSTOP SLAVE;
LOAD DATA FROM MASTER; -- 僅 MyISAM、需 SUPER/RELOAD 權限
START SLAVE;
service mysqld restartSTOP SLAVE; LOAD DATA FROM MASTER; START SLAVE;SHOW SLAVE STATUS\G
關鍵指標:
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0Slave_IO_State: Waiting for master to send event問題:拔網線後恢復,Slave_IO_Running 長時間為 No,同步延遲極大。
原因:預設網路超時過長,Slave 未及時偵測斷線。
解決:my.cnf 加入 slave-net-timeout = 60,重啟生效。測試恢復正常。
SHOW SLAVE STATUS\G 記錄 Master_Log_File、Read_Master_Log_Pos。SHOW MASTER LOGS; 確認該 binlog 是否存在。START SLAVE; 即可追上。-- Slave
STOP SLAVE;
LOAD DATA FROM MASTER;
RESET MASTER;
START SLAVE;
-- Master
STOP SLAVE;
RESET SLAVE;
START SLAVE;
LOAD DATA FROM MASTER 僅支援 MyISAM 表。mysqldump --master-data=2 --single-transaction 完整備份導入。auto_increment_offset、auto_increment_increment 避免主鍵衝突(本案例未啟用,僅單向寫入)。| 指令 | 用途 |
|---|---|
| SHOW SLAVE STATUS\G | 完整狀態 |
| SHOW MASTER STATUS | Master binlog 位置 |
| SHOW MASTER LOGS | Master binlog 列表 |
| SHOW SLAVE HOSTS | Master 端看 Slave 列表 |
| STOP/START SLAVE [IO_THREAD|SQL_THREAD] | 精細控制執行緒 |
| SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n | 跳過 n 個錯誤事件 |
| CHANGE MASTER TO ... | 動態變更 Master 連線資訊 |
sync_binlog=1、innodb_flush_log_at_trx_commit=1 雙 1 保證不丟資料。Seconds_Behind_Master 告警閾值(如 > 30 秒)。依此流程部署,可在 Linux 環境建立穩定可維運的 MySQL 雙主同步架構。