29 | 如何判断一个数据库是不是出问题了?

主备切换有两种场景,一种是主动切换,一种是被动切换。被动切换,往往是因为主库出问题了,有HA熊发起的。

怎么判断一个主库出问题了?

连上MySQL执行一个select 1,成功返回了,就表示主库没问题吗?

select 1判断

成功返回,只能说明这个库的进程还在,并不能说明主库没问题。

查表判断

一般做法是,在系统里(mysql库)创建一个表,比如health_check,里面只放一行数据,然后定期执行:

select * from mysql.health_check;

这个方法可以检测出由于并发线程过多导致的数据库不可用的情况。

但是,空间满了以后,这种方法又会变得不好使。

更新判断

常见的做法是放一个timestamp字段,用来表示最后一次执行检测的时间。更新语句类似于:

update mysql.health_check set t_modified=now();

节点可用性检测都应该包含主库和备库。如果用更新来检测主库的话,那么备库也要进行更新检测。

这样的话,mysql。health_check就不能只有一行数据了,因为只有一行数据会导致主备同步停止(主备之间更新产生冲突)。

可以在mysql.health_check表上存入多行数据,并用A、B的server_id做主键。

mysql> CREATE TABLE `health_check` (
  `id` int(11) NOT NULL,
  `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

/* 检测命令 */
insert into mysql.health_check(id, t_modified) values (@@server_id, now()) on duplicate key update t_modified=now();

内部判断

如果MySQL可以告诉我们,内部每一次IO请求的时间,那判断数据库是否出问题的方法就可靠多了。

MySQL 5.6版本以后提供的performance_schema库,就在file_summary_by_event_name表里统计了每次IO请求的时间。

 

建议:优先考虑update系统表,然后再配合增加检测performance_schema的信息。

 

上一篇:28 | 读写分离有哪些坑

下一篇:30 | 答疑文章(二):用动态的观点看加锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值