MySQL 判断数据库是否可用
本文将介绍 MySQL 中判断数据库服务是否工作正常的方式。
一、SELECT 1 判断
SELECT 1
成功返回,说明 MySQL 的进程还在,但并不能说明 MySQL 没问题。
可能存在这样一个情况:
并发查询数量超过 innodb_thread_concurrency 参数,此时查询表的请求将会被迫等待,但
SELECT 1
不会有问题。
二、查询判断
一般的做法是,在系统库(mysql 库)中创建一个表,放置一行数据,执行查询语句检查数据库是否可用。
1 |
|
可能存在这样一个情况:
binlog 所在的磁盘空间已满,此时所有的更新语句将被堵住,而查询语句可以正常执行,此时将无法判断出异常。
三、更新判断
可以通过增加一个时间字段,每次判断时更新它,通过是否更新成功判断数据库是否可用。
1 |
|
在主从模式下,主库和从库都需要检测,我们可以在 health_check 表中存入多行数据,分别以每台 MySQL 服务器的唯一的 server_id 作为主键,分别对各台服务器执行对应的更新语句
四、内部统计
上面的判断方法存在一个问题,它们能否判断成功是不确定的,在一台反应已经很慢的服务器中,一个简单的查询、更新语句也有可能很快执行成功,这将导致应用程序出现误判。
可以通过 MySQL 的内部统计进行判断,它具有更高的可靠性,performance_schema 库的 file_summary_by_event_name 表里统计了每次 IO 请求的时间。
参考
- MySQL 技术内幕
- MySQL 实战 45 讲
- MySQL 是怎样运行的:从根儿上理解 MySQL