暂无图片
MHA上有这个报错
我来答
分享
樱桃小丸子
2021-05-08
MHA上有这个报错

MHA上有这个报错
12891bd505e946e68eeb5c87f7838d5f.jpg

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Cui Hulong

从错误日志里的提示:《target master‘s advisory lock is already held by someone. Please check whether you monitor the same master。。。》

mysql主节点是否存在。

mha代码里内容:也是验证主库状态

    ( $ret, $ssh_reachable ) = $master_ping->wait_until_unreachable();
    ( $ret, $ssh_reachable ) = $_master_ping->wait_until_unreachable();
    if ( $ret eq '2' ) {
      $log->error(
"Target master's advisory lock is already held by someone. Please check whether you monitor the same master from multiple monitoring processes."
暂无图片 评论
暂无图片 有用 0

杀死对应监控集群主库MHA连接的会话( kill xxx; )或者重启主库

  • 杀死对应监控集群主库MHA连接的会话即可,原理
    • MHA在监控对应实例之前,会发起一个锁请求SELECT GET_LOCK('MHA_Master_High_Availability_Monitor', ?) AS Value,如果加锁成功则返回成功,如果加锁不成功则会提示有另外的进程在监控该实例
    • MHA在结束监控之后,会释放锁SELECT RELEASE_LOCK('MHA_Master_High_Availability_Monitor') As Value,或者直接关闭连接(也可以释放锁)
    • 如果MHA在异常退出之后没有关闭MySQL的会话,那么该锁会一直存在,且无法再次启动MHA进程
  • 其他过程加锁


use constant Get_Failover_Lock_SQL =>

  "SELECT GET_LOCK('MHA_Master_High_Availability_Failover', ?) AS Value";

use constant Release_Failover_Lock_SQL =>

  "SELECT RELEASE_LOCK('MHA_Master_High_Availability_Failover') As Value";

use constant Get_Monitor_Lock_SQL =>

  "SELECT GET_LOCK('MHA_Master_High_Availability_Monitor', ?) AS Value";

use constant Release_Monitor_Lock_SQL =>

  "SELECT RELEASE_LOCK('MHA_Master_High_Availability_Monitor') As Value";




 


暂无图片 评论
暂无图片 有用 1
carnzy
2023-08-18
感谢大佬!我把manager杀掉重启后没有报错了
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏