首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL MHA 高可用部署常見 11 大坑與解決方案總結

     編輯:MySQL 綜合教學

MHA (Master High Availability) 生產環境落地避坑指南

MHA 是 MySQL 主從架構下廣泛使用的高可用方案,具備秒級故障轉移、從庫自動重定向、Binlog 補全等能力。但部署過程中細節極多,稍有疏忽即導致切換失敗或數據不一致。本文匯總 11 類高頻問題及標準化解決方案,助您構建穩健的 MHA 體系。

一、SSH 互信與非 Root 用戶等效性配置

# 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 節點,互信失敗將導致所有遠程命令執行阻塞。

二、MHA 管理節點目錄權限

# 以 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 寫入日誌/狀態文件。

三、MHA 專用資料庫帳號(管理操作用)

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。

五、從庫必須開啟 Binlog

[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 自動清理

原因:切換時新主可能需從舊 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
從庫 BinlogSHOW VARIABLES LIKE 'log_bin';ON
過濾規則一致性SHOW VARIABLES LIKE 'replicate%';所有節點完全一致
relay_log_purgeSHOW VARIABLES LIKE 'relay_log_purge';0
read_onlySHOW 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 適合傳統主從架構,但不支援多主寫入、跨機房自動切換、分布式事務
  • MySQL 5.7+ 建議評估 MGR (Group Replication):原生多主、Paxos 一致性、自動故障轉移
  • MySQL 8.0+ 結合 InnoDB Cluster + Router 實現開箱即用高可用
  • 雲原生場景優先考慮 Operator 模式(Oracle MySQL Operator、Presslabs StackGres、Vitess Operator)
  • 無論方案,定期演練故障切換、驗證數據一致性、監控複製延遲是高可用體系生命線

MHA 雖屬經典方案,但在細節決定成敗。建議將上述清單納入標準化部署 SOP,實現「零驚喜」上線與「可預期」故障恢復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved