最容易、最安全的「完整重同步」步驟(排除指定 DB)
適用情境
- Slave 一直出現
1032 / 1146錯誤- 資料已嚴重不同步
- 非 GTID 複製
- 需要保留
Replicate_Ignore_DB設定
🛑 Step 1:在 SLAVE 停止並重置複製
sql
STOP SLAVE;
RESET SLAVE ALL;
目的:
清除舊的 relay log,避免殘留錯誤事件。
📌 Step 2:在 MASTER 鎖定資料並取得 binlog 位置
sql
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
請記下輸出中的:
text
File: mysql-bin.xxxxxx
Position: xxxxxxxx
⚠️ 請保持此連線不要中斷
📦 Step 3:在 MASTER 匯出所有資料庫(排除 ignore 的 DB)
bash
mysqldump -u root -p \
--all-databases \
--single-transaction \
--routines \
--triggers \
--events \
--master-data=2 \
--ignore-database=dbispconfig \
--ignore-database=dbispconfig2 \
--ignore-database=mysql \
--ignore-database=phpmyadmin \
--ignore-database=sys \
--ignore-database=information_schema \
--ignore-database=performance_schema \
> fulldump.sql
說明:
--master-data=2:自動記錄 binlog 位置--single-transaction:InnoDB 無鎖匯出- ignore DB 與
Replicate_Ignore_DB完全一致
🔓 Step 4:解除 MASTER 鎖定
sql
UNLOCK TABLES;
🧹 Step 5:在 SLAVE 清空舊資料(非常重要)
✅ 方法一(推薦,安全)
sql
SET sql_log_bin = 0;
DROP DATABASE IF EXISTS c4web113;
DROP DATABASE IF EXISTS c7_5guvv_web116;
-- 其他客戶 DB 請一併 DROP
SET sql_log_bin = 1;
⚠️ 只 DROP「需要複製的 DB」,ignore 的 DB 不要動
📥 Step 6:在 SLAVE 匯入完整資料
bash
mysql -u root -p < fulldump.sql
⏳ 視資料量大小,可能需要數分鐘~數十分鐘
🔗 Step 7:在 SLAVE 設定 Master binlog 位置
(使用 Step 2 記下來的值)
sql
CHANGE MASTER TO
MASTER_HOST='MasterSQLServer_IPAddress',
MASTER_USER='slaveuser2',
MASTER_PASSWORD='你的密碼',
MASTER_LOG_FILE='mysql-bin.xxxxxx',
MASTER_LOG_POS=xxxxxxxx;
▶️ Step 8:在 SLAVE 啟動複製
sql
START SLAVE;
✅ Step 9:確認複製狀態
sql
SHOW SLAVE STATUS\G
確認以下欄位:
text
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_SQL_Error:
Seconds_Behind_Master: (數字,並會逐漸下降)
✅ 完成後預期結果
- ✅ 不再出現
1032 / 1146錯誤 - ✅ WordPress(含 Wordfence)資料正常
- ✅ Slave 與 Master 完整一致
- ✅
Replicate_Ignore_DB持續生效
⚠️ 注意事項(請務必遵守)
- ❌ 不要再使用
SQL_SLAVE_SKIP_COUNTER - ❌ 不要手動補單一 table
- ❌ 不要分開 dump 不同 DB