MySQL巡检是保障数据库稳定运行的重要环节,通过定期执行巡检命令,可以及时发现潜在问题并优化性能,以下是常用的MySQL巡检命令及详细说明,涵盖系统状态、性能指标、存储引擎、安全配置等方面。

系统状态巡检
-
检查MySQL服务状态
使用systemctl status mysql(Linux系统)或ps aux | grep mysql确认MySQL进程是否正常运行,检查是否有异常退出或重启记录。 -
查看连接数
SHOW PROCESSLIST; -- 查看当前所有连接 SHOW STATUS LIKE 'Threads_connected'; -- 查看当前活跃连接数 SHOW GLOBAL STATUS LIKE 'Max_used_connections'; -- 查看历史最大连接数
若连接数接近
max_connections阈值,需调整参数或优化应用连接池。 -
检查慢查询日志
(图片来源网络,侵删)SHOW VARIABLES LIKE 'slow_query_log%'; -- 确认慢查询日志是否开启 SHOW VARIABLES LIKE 'long_query_time'; -- 查看慢查询阈值(默认10秒) SELECT COUNT(*) FROM mysql.slow_log; -- 统计慢查询数量
建议开启慢查询日志,并通过
mysqldumpslow工具分析。
性能指标巡检
-
QPS与TPS监控
SHOW GLOBAL STATUS LIKE 'Queries_per_second'; -- QPS估算 SHOW GLOBAL STATUS LIKE 'Com_commit'; -- 每秒提交数(TPS相关) SHOW GLOBAL STATUS LIKE 'Com_rollback'; -- 每秒回滚数
高负载场景下需结合
SHOW ENGINE INNODB STATUS分析事务吞吐量。 -
锁等待与死锁
(图片来源网络,侵删)SHOW ENGINE INNODB STATUS\G; -- 查看InnoDB锁状态和死锁信息 SHOW STATUS LIKE 'Innodb_row_lock_waits'; -- 锁等待次数
若
Innodb_row_lock_waits频繁升高,需检查SQL索引设计或事务隔离级别。 -
缓存命中率
SHOW GLOBAL STATUS LIKE 'Key_read_requests'; -- Key缓存读取请求 SHOW GLOBAL STATUS LIKE 'Key_reads'; -- 物理读取次数 SELECT (Key_read_requests - Key_reads) / Key_read_requests * 100 AS 'Cache Hit Ratio';
缓存命中率低于90%时,可调整
key_buffer_size参数。
存储引擎巡检
-
InnoDB状态检查
SHOW ENGINE INNODB STATUS\G; -- 查看InnoDB核心状态 SHOW TABLE STATUS LIKE '表名'\G; -- 检查表碎片化程度(Data_free字段)
若
Data_free值较大,需执行OPTIMIZE TABLE优化表空间。 -
MyISAM表维护
CHECK TABLE 表名; -- 检查表错误 REPAIR TABLE 表名; -- 修复损坏表(谨慎使用)
MyISAM引擎需定期检查,避免因崩溃导致数据丢失。
资源使用巡检
-
磁盘空间监控
SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024, 2) AS 'Size(MB)' FROM information_schema.tables GROUP BY table_schema;定期清理无用日志或归档历史数据,避免磁盘满容。
-
内存使用情况
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; -- InnoDB缓冲池大小 SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_free'; -- 空闲页数
若
Innodb_buffer_pool_pages_free持续为0,需增加内存分配。
安全与权限巡检
-
检查用户权限
SELECT user, host, authentication_string FROM mysql.user; SHOW GRANTS FOR '用户名'@'主机名';
定期回收过期用户权限,禁用默认匿名账户。
-
密码策略验证
SHOW VARIABLES LIKE 'validate_password%'; -- 检查密码复杂度策略
确保密码符合安全要求,避免弱密码风险。
参数配置检查
关键参数巡表示例:
| 参数名 | 建议值 | 检查命令 |
|--------|--------|----------|
| max_connections | 根据业务量调整 | SHOW VARIABLES LIKE 'max_connections' |
| innodb_buffer_pool_size | 物理内存的50%-70% | SHOW VARIABLES LIKE 'innodb_buffer_pool_size' |
| query_cache_size | 0(MySQL 8.0已移除) | SHOW VARIABLES LIKE 'query_cache_size' |
| expire_logs_days | 7-30天 | SHOW VARIABLES LIKE 'expire_logs_days' |
相关问答FAQs
Q1: 如何定位导致高CPU占用的SQL?
A1: 可通过以下步骤定位:
- 开启
general_log或performance_schema记录SQL; - 执行
SHOW PROCESSLIST找出长时间运行的查询; - 使用
EXPLAIN分析执行计划,检查是否缺少索引或存在全表扫描。
Q2: 巡检发现大量锁等待,如何优化?
A2: 优化方法包括:
- 检查事务隔离级别,避免使用
SERIALIZABLE; - 优化SQL语句,减少大事务和长事务;
- 添加合适的索引,避免行锁升级为表锁;
- 分库分表降低单表数据量,减少锁竞争。
