一台 MySQL 從庫因硬件故障停機一周。運維修復上架並**開機自啟 MySQL 實例**(4 個實例)。實例啟動後自動連接主庫拉取 Binlog,累積一周約 160GB+ 日志,瞬間佔滿主庫網卡帶寬,導致主庫業務感知延遲 17 分鐘。
SHOW PROCESSLIST 歷史記錄顯示復制用戶狀態 Waiting for net| 環節 | 問題 |
|---|---|
| 機器上架 | 修復完成時間不可控,無通知機制 |
| 啟動策略 | 開機自啟 MySQL,無人工確認環節 |
| 復制邏輯 | 從庫啟動後全量拉取缺失 Binlog,無限速、無延遲控制 |
| 監控盲區 | 無網絡流量/復制延遲/從庫上線告警 |
# 禁用開機自啟 systemctl disable mysqld@3306 systemctl disable mysqld@3307 # ... 所有實例 # 啟動腳本加入安全檢查 #!/bin/bash # safe_start_mysql.sh read -p "確認主庫網絡正常、無大促大促活動?(y/n) " confirm [[ $confirm != "y" ]] && exit 1 systemctl start mysqld@3306 sleep 5 mysql -S /tmp/mysql3306.sock -e "STOP SLAVE;" echo "實例 3306 已啟動並暫停復制,請人工確認後執行 START SLAVE"
-- 從庫配置:限制復制 SQL 線程吞吐 SET GLOBAL slave_parallel_workers=4; -- 並行復制 SET GLOBAL slave_pending_jobs_size_max=128M; -- 佇列上限 -- 主庫配置:限制 Binlog 發送速率(需 patch 或 Proxy 層面限流) -- 可考慮使用 MySQL Router / ProxySQL 做流量整形
Seconds_Behind_Master 告警SHOW BINARY LOGS 統計)這是一個**典型的「已知風險、缺乏流程、監控缺位」導致的生產事故**。核心教訓:
將此案例寫入《MySQL 運維避坑指南》,每次從庫上架/重啟必讀、必核、必簽。