MHA 是 MySQL 主從架構下廣泛使用的高可用方案,具備秒級故障轉移、從庫自動重定向、Binlog 補全等能力。但部署過程中細節極多,稍有疏忽即導致切換失敗或數據不一致。本文匯總 11 類高頻問題及標準化解決方案,助您構建穩健的 MHA 體系。
# 1. 所有節點 /etc/hosts 映射主機名 # 2. 非 root 用戶(如 mysql)生成密鑰對 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 3. 分發公鑰(含管理節點),支援非標準 SSH 埠 ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 50011 mysql@172.16.16.10" # 4. 驗證免密登錄 ssh -p 50011 vdbsrv1 date ssh -p 50011 vdbsrv2 date ssh -p 50011 vdbsrv3 date ssh -p 55555 vdbsrv4 date
核心點:MHA Manager 以管理用戶身份通過 SSH 操作各 DB 節點,互信失敗將導致所有遠程命令執行阻塞。
# 以 mysql 用戶運行 MHA 時,需預建日誌目錄並授權 mkdir -p /var/log/masterha/app1 chown -R mysql:mysql /var/log/masterha su - mysql masterha_check_repl --conf=/etc/app1.cnf
報錯特徵:Permission denied 寫入日誌/狀態文件。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.16.%' IDENTIFIED BY 'repl_pass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY 'repl_pass';
最小權限原則:僅授 REPLICATION SLAVE,嚴禁 ALL PRIVILEGES。
[mysqld] replicate-do-db = biz_db replicate-ignore-db = mysql,test,sys # 所有節點(含備選主)配置完全相同
報錯特徵:[error] Replication filtering check failed ... All slaves must have same replication filtering rules.
原因:切換時新主可能需從舊 Relay Log 獲取未同步事務,自動清理會導致數據缺失。
八、從庫強制唯讀模式
告警特徵:
[info] read_only=1 is not set on slave ...防止業務誤寫從庫導致切換時數據衝突。九、mysqlbinlog 版本過低導致 Binlog 解析失敗
# 現象:Testing mysql connection and privileges..sh: mysql: command not found # 解決: ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql # 或 yum install mysql-community-client十一、清理 mysql.user 表中匿名用戶
檢查項 命令/驗證方式 預期結果 SSH 互信 ssh -p $PORT $USER@$HOST date 無密碼返回時間 目錄權限 ls -ld /var/log/masterha/ 屬主為運行用戶 管理帳號權限 SHOW GRANTS FOR 'mha'@'%'; 含 SUPER/REPLICATION CLIENT 復制帳號權限 SHOW GRANTS FOR 'repl'@'%'; REPLICATION SLAVE 從庫 Binlog SHOW VARIABLES LIKE 'log_bin'; ON 過濾規則一致性 SHOW VARIABLES LIKE 'replicate%'; 所有節點完全一致 relay_log_purge SHOW VARIABLES LIKE 'relay_log_purge'; 0 read_only SHOW VARIABLES LIKE 'read_only'; 1 mysqlbinlog 版本 mysqlbinlog --version >= 3.4 (MySQL 5.6+) mysql 客戶端 which mysql 可用路徑 匿名用戶 SELECT User,Host FROM mysql.user WHERE User=''; 空結果集 十三、總結與演進建議
MHA 雖屬經典方案,但在細節決定成敗。建議將上述清單納入標準化部署 SOP,實現「零驚喜」上線與「可預期」故障恢復。