在 Debian 上 MySQL / MariaDB 占用内存过高,通常是因为默认配置偏向“性能”而非“省内存”。可以从排查 → 调优 → 限制三步来解决。
top
# 或
htop
# 或
ps aux --sort=-%mem | head
查看 mysqld 的 RES / %MEM。
也可以看 MySQL 自己认为用了多少:
SHOW STATUS LIKE 'Innodb_buffer_pool_bytes_data';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
默认往往是:
innodb_buffer_pool_size = 128M ~ 几 G
✅ 建议:
修改:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 256M
重启:
sudo systemctl restart mysql
每个连接都会占内存。
查看:
SHOW VARIABLES LIKE 'max_connections';
默认可能是 151,甚至更高。
✅ 小服务器建议:
max_connections = 50
常见参数(可适当调小):
sort_buffer_size = 256K
read_buffer_size = 128K
read_rnd_buffer_size = 256K
join_buffer_size = 256K
⚠️ 不要设太小,否则查询变慢。
如果你用的是 MySQL 5.7:
query_cache_size = 0
query_cache_type = 0
(MySQL 8 已移除)
tmp_table_size = 32M
max_heap_table_size = 32M
mysql_tunersudo apt install mysqltuner
mysqltuner
它会直接告诉你:
sudo systemctl edit mysql
[Service]
MemoryMax=512M
sudo systemctl daemon-reload
sudo systemctl restart mysql
⚠️ MySQL 被 OOM 会直接崩。
[mysqld]
innodb_buffer_pool_size = 128M
max_connections = 30
sort_buffer_size = 256K
read_buffer_size = 128K
join_buffer_size = 256K
tmp_table_size = 16M
max_heap_table_size = 16M
我可以直接给你一套 可复制的配置文件。