舊:單主(MyISAM) + 多從 → 新:DRBD+Heartbeat 雙主 + 多從 (InnoDB)
驅動力:InnoDB 事務/行鎖/崩潰恢復 + DRBD 塊級同步高可用。
Seconds_Behind_Master、pt-heartbeat、Prometheus + Grafana 告警閾值建議 ≤ 1s。Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids
log_bin + log_slave_updates=ON。CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY 'StrongPass!'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'10.0.0.%'; FLUSH PRIVILEGES;
GRANT OPTION、SUPER、FILE 等高危權限。ping/telnet 3306 → SHOW GRANTS → SHOW MASTER STATUS → SHOW SLAVE STATUS\G。| 決策點 | 選擇 | 理由 |
|---|---|---|
| 核心業務表引擎 | InnoDB | OLTP 交易支付、行鎖並發、崩潰安全 |
| 系統表/臨時表 | 保留 MyISAM/MEMORY | 兼容性、性能 |
| DRBD 重啟慢導致 MyISAM 損壞風險 | 全量轉 InnoDB | 避免啟動階段修復表阻塞、數據不一致 |
Last_SQL_Error: Error 'Duplicate entry ... for key PRIMARY' Query: INSERT INTO lee_sessions ...
mysqldump --single-transaction 導出主庫快照,但在**高併發寫入下**,單事務視圖無法覆蓋全庫一致性時間點,導致備份數據與 Binlog 位點不匹配。mysqldump -uroot --quick --flush-logs --master-data=1 -p myproject > myproject.sql # --master-data=1:輸出文件包含 CHANGE MASTER TO 語句(非註釋) # 自動隱含 --lock-all-tables(全局讀鎖),確保備份與 Binlog 位點強一致
grep "CHANGE MASTER" myproject.sql # CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000008', MASTER_LOG_POS=106;
導入後啟動 Slave,**長期觀察零 1062 錯誤**。
gtid_mode=ON, enforce_gtid_consistency=ON,簡化故障切換與拓扑變更。rpl_semi_sync_master=ON, rpl_semi_sync_slave=ON,關鍵事務至少雙節點落盤。slave_parallel_workers=8, slave_preserve_commit_order=1,降低大事務回放延遲。pt-table-checksum --recurse=1 --databases=core_db,差異自動 pt-table-sync 修復。從 MyISAM 單主遷移到 InnoDB DRBD 雙主,**核心收益在事務安全與高可用**。復制層面必須守住「異步本質監控、server-id 唯一、從庫關 Binlog、最小權限、標準化 SOP、GTID+半同步+並行回放」六大基線。遷移過程中用 --master-data=1 替代 --single-transaction 解決一致性備份難題,是本次實戰最大技術亮點。