在 Debian 上运行 MySQL 感觉“很慢”,通常不是 Debian 本身的问题,而是配置、资源、存储或查询方式导致的。下面按常见原因系统地说明,并给出排查和优化建议。
Debian 官方 MySQL/MariaDB 的默认配置偏向稳定而不是性能。
常见未优化点:
innodb_buffer_pool_size 太小(默认可能只有 128M)✅ 解决:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
建议设置为物理内存的 50%~70%(专用数据库服务器)。
Debian 默认安装的是 MariaDB(开源分支):
mysql --version
MariaDB 和 MySQL 性能特性不同,某些场景下:
可能和“你以为的 MySQL”不一样。
MySQL 是 I/O 密集型服务。
慢的典型表现:
SHOW PROCESSLIST 中大量 Sending dataiowait 很高(top 中)✅ 检查:
iostat -x 1
或
dmesg | grep error
✅ 建议:
这是最容易被忽略但最常见的原因。
表现:
✅ 排查:
EXPLAIN SELECT ...;
✅ 优化:
SELECT *LIKE '%xx%'systemd 可能对 MySQL 有默认限制:
systemctl show mysql | grep -i limit
常见问题:
TasksMax 太小MySQL 最怕 swap。
检查:
free -h
swapon --show
✅ 建议:
vm.swappiness=1
以下都会明显拖慢:
general_log=ONslow_query_log 没阈值binlog 同步写✅ 检查:
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'general_log';
# 1. 内存
free -h
# 2. 磁盘
df -h
iostat -x 1
# 3. MySQL 状态
mysqladmin status
mysql -e "SHOW PROCESSLIST;"
# 4. 配置
mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
/etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
max_connections = 200
skip_name_resolve = ON
然后:
systemctl restart mysql
你可以告诉我:
我可以直接帮你给出针对性的配置和 SQL 优化方案。