MySQL - 實時生產中的主到主複製,無需停機
我想設置 2 節點主主複製。我知道此複製中的失敗點。它是一個大約 1.5TB 的龐大數據庫。重型 OLTP 正在進行。但它必須立即實施。
我有 2 台伺服器。
1. Master1 2. Master2
最初我所做的是,
大師1:
- 更改 my.cnf 以進行複制。
- 使用 –master-data=2 獲取 mysqldump (用於獲取準確的 binlog 位置)
大師2:
- 將轉儲恢復到 Master2。
- 在 my.cnf 上進行更改。
- 將複製設置為 Master1(更改 master=‘Master1’)。
- 啟動奴隸。
現在 Master1 正在復製到 Master2。
然後我需要複製*
Master2 to Master1
*. 只需在 Master1 上獲取 binlog 位置並設置複製即可,但問題是 binog 文件和位置經常更改。因此,在 Master1 上執行更改主命令之前,binog 已更改。我怎樣才能在不停機的情況下做到這一點。
我很高興你能夠 mysqldump 1.5TB 數據庫。你肯定有耐心。
現在進行現實檢查。您將需要一些停機時間來重新啟動和暫停。
不再需要mysqldump了。
步驟 01
你把這條線
/etc/my.cnf
放在 Master1 和 Master2 上嗎?log-slave-updates
如果您不確定,請在 Master1 和 Master 上執行它
select @@global.log_slave_updates;
如果你在 Master1 和 Master2 上都得到這個
mysql> select @@global.log_slave_updates; +----------------------------+ | @@global.log_slave_updates | +----------------------------+ | 1 | +----------------------------+ 1 row in set (0.00 sec)
然後轉到
STEP 02
。這需要在
/etc/my.cnf
Master1 和 Master2 上。如果沒有,請添加它並在 Master1 和 Master2 上重新啟動 mysqld。
步驟 02
您是否在 Master2 上啟用了二進制日誌記錄?
你應該在 Master1 中有這樣
/etc/my.cnf
一行log-bin = ....
請確保 Master2 有它。
如果不確定是否有,請在 Master2 上登錄 MySQL 並執行
mysql> show binary logs;
如果它迴響
mysql> show binary logs; ERROR 1381 (HY000): You are not using binary logging
然後,將該
log-bin
行添加到/etc/my.cnf
Master2 中並在 Master2 中重新啟動 mysql。在Master1和 Master2 上啟用log-slave-updates和log-bin後,您就可以在另一個方向上設置複製了
步驟 03
在 Master2 上
STOP SLAVE; FLUSH TABLES; FLUSH LOGS; SHOW BINARY LOGS;
步驟 04
在 Master1 上
CHANGE MASTER TO MASTER_HOST='IP or Hostname of Master2', MASTER_PORT=3306, MASTER_USER='...', MASTER_PASSWORD='...', MASTER_LOG_FILE='First Binary Log On Master2', MASTER_LOG_POS=4 ; SHOW SLAVE STATUS\G
步驟 05
測試從 Master1 到 Master2 的連接性
在 Master1 上
START SLAVE IO_THREAD; DO SLEEP(10); SHOW SLAVE STATUS\G
尋找
Slave_IO_Running
。它應該是“是”。跑
SHOW SLAVE STATUS\G
3-5次。Relay_Log_Space
應該增加。步驟 06
從中繼日誌開始處理 SQL
在 Master1 上執行它
START SLAVE SQL_THREAD; DO SLEEP(10); SHOW SLAVE STATUS\G
尋找
Slave_SQL_Running
。它應該是“是”。尋找
Seconds_Behind_Master
。它應該是 0。如果它大於 0,則繼續執行SHOW SLAVE STATUS\G
直到Seconds_Behind_Master
為 0。