故障排查指南
最后更新: 2026-01-22
作者: MySQL Team
页面目录
第十三章:故障排查指南
13.1 连接问题
无法连接数据库
# 1. 检查服务状态
systemctl status mysqld
ps aux | grep mysql
# 2. 检查端口监听
netstat -tlnp | grep 3306
ss -tlnp | grep 3306
# 3. 测试连接
mysql -h 127.0.0.1 -P 3306 -u root -p
# 4. 检查防火墙
firewall-cmd --list-ports
iptables -L -n
连接数过多
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW PROCESSLIST;
-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 设置临时最大连接数
SET GLOBAL max_connections = 500;
-- 杀掉空闲连接
KILL PROCESSLIST_ID;
KILL CONNECTION PROCESSLIST_ID;
# my.cnf 永久配置
[mysqld]
max_connections = 500
wait_timeout = 600
interactive_timeout = 600
13.2 性能问题
CPU 使用率高
-- 1. 查看当前查询
SHOW PROCESSLIST;
-- 2. 找出慢查询
SHOW FULL PROCESSLIST;
SHOW VARIABLES LIKE 'slow_query%';
-- 3. 分析锁等待
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
-- 4. 查看 InnoDB 状态
SHOW ENGINE INNODB STATUS;
# 使用 performance_schema
mysql -u root -p -e "SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;"
内存使用过高
-- 查看内存使用
SHOW STATUS LIKE 'Innodb_buffer_pool%';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 调整缓冲池大小
SET GLOBAL innodb_buffer_pool_size = 2147483648; -- 2GB
-- 查看临时表使用
SHOW STATUS LIKE 'Created_tmp%';
# 监控内存使用
watch -n 1 'mysql -u root -p -e "SHOW STATUS LIKE \"Innodb_buffer_pool%\";"'
I/O 延迟高
-- 查看磁盘 I/O 统计
SHOW ENGINE INNODB STATUS\G
-- History list length: 事务链表长度
-- INSERT BUFFER USAGE: 插入缓冲使用情况
-- 检查慢日志
mysqldumpslow -s t /var/log/mysql/slow.log
13.3 锁问题
查看锁等待
-- 查看所有锁
SELECT
r.trx_id,
r.trx_mysql_thread_id,
r.trx_query,
r.trx_state,
r.trx_started,
p.HOST,
p.USER,
p.DB
FROM INFORMATION_SCHEMA.INNODB_TRX r
INNER JOIN INFORMATION_SCHEMA.PROCESSLIST p ON r.trx_mysql_thread_id = p.ID;
-- 查看锁等待详情
SELECT
l.REQUESTING_TH