mha默认日志路径由配置文件中manager_log参数指定,常见为/etc/mha_master/app1/app1.log或/var/log/mha/app1.log;若未显式配置则不落盘,masterha_manager可能静默退出。

直接看 masterha_manager 日志文件路径和末尾内容
别先猜,先确认日志在哪、有没有写入。MHA 默认日志路径由配置文件里的 manager_log 指定,常见位置是 /etc/mha_master/app1/app1.log 或 /var/log/mha/app1.log。如果配置里没写,它可能根本不会落盘——此时 masterha_manager 启动时会报错或静默退出。
执行以下命令快速定位:
-
grep "manager_log" /etc/mha_master/app1.conf—— 查配置中是否显式设置了日志路径 -
ls -l $(grep "manager_log" /etc/mha_master/app1.conf | awk -F'=' '{print $2}' | sed 's/^[[:space:]]*//')—— 看文件是否存在、权限是否为 644、属主是否是运行masterha_manager的用户(通常是mha或mysql) -
tail -n 50 /path/to/your/app1.log—— 重点看最后 20 行,MHA 切换失败时的报错基本都集中在这里,不是开头也不是中间
重点关注日志里重复出现的 ERROR 关键词和上下文时间戳
MHA 日志不按“错误等级”分级,但会用明确文字标出失败动作。不要只搜 ERROR,要结合行为关键词一起看:
-
SSH connection failed—— 实际是 root 登录被禁,但日志不报 Permission denied,只显示超时;需立刻手动测试:ssh -o ConnectTimeout=5 -o BatchMode=yes -i /etc/mha/ssh_key mha@192.168.1.102 -
Checking slave status后卡住不动 —— 常见于某台从库Seconds_Behind_Master为NULL(SQL 线程已停),或 relay log 损坏;检查show slave status\G输出中的Slave_SQL_Running和Relay_Log_Space -
Failed to get master binlog position—— 主库 mysqld 已停,但 MHA 还试图连上去读SHOW MASTER STATUS;说明ping_interval太小或secondary_check_script未启用,导致误判 -
Health is critical—— 不是延迟高,而是 GTID 状态不一致(比如主开、从关)或binlog_format不统一(必须全集群设为ROW)
对照配置项逐项验证是否遗漏或写错
MHA 对配置极其敏感,一个字段拼错或漏配就会静默跳过节点甚至不启动。检查以下几处高频出错点:
-
ssh_user和repl_user是两个独立字段:前者用于节点间 SSH 操作,后者用于复制账户;不能混用,也不能留空 -
master_binlog_dir必须指向主库上真实存在的 binlog 目录(如/var/lib/mysql),且 MHA manager 节点要有读取权限;若主库挂了,这个路径必须仍可访问(比如通过 NFS 或备份挂载) -
master_ip_failover_script文件必须存在、有 +x 权限、且脚本结尾必须exit 0;哪怕你不用 VIP,空脚本也得返回成功,否则 MHA 认为“故障转移失败”而中止 -
relay_log_recovery=ON必须在所有从库的my.cnf中显式开启;否则 crash 后 relay log 损坏,MHA 会直接排除该节点作为候选 master
切换后应用连不上,别查 MHA 日志
Can't connect to MySQL server on 'old_master_ip' 这类报错完全不在 MHA 日志里——MHA 只负责 MySQL 角色切换和 VIP 漂移(如果配了),它不改 DNS、不刷新应用连接池、不通知客户端。真正要查的是:
- ARP 缓存:新主节点是否启用了
arp_announce=2?局域网其他机器可能还缓存着旧 IP 对应的 MAC 地址 - MySQL 8.0+ 密码插件:老客户端驱动不支持
caching_sha2_password,切换前需统一改为mysql_native_password - 没有 VIP 时的下游服务:应用是否依赖硬编码 IP?应由外部服务(如 HAProxy + Consul)做后端发现,MHA 本身不提供服务注册能力
日志里找不到连接问题,就说明问题根本不在 MHA 执行链路上。最容易被忽略的是:MHA 切换完成后会自动退出,masterha_check_status 返回 NOT_RUNNING 是正常现象,不代表失败。











