在 Debian 上优化 MySQL(或 MariaDB)通常从 系统层面、MySQL 配置、表结构、查询、监控 五方面入手。下面给你一套实用、可落地的优化指南,适合生产环境。
推荐:
ext4 ✅(稳定)xfs ✅(大文件、高并发性能更好)df -Th
MySQL 对 swap 非常敏感:
swapoff -a
永久关闭:
vim /etc/fstab
# 注释 swap 行
或者降低 swappiness:
sysctl vm.swappiness=1
vim /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535
配置文件位置:
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_buffer_pool_size = 10G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
说明:
| 参数 | 说明 |
|---|---|
| innodb_buffer_pool_size | 最重要,建议 60–70% 内存 |
| innodb_log_file_size | 提高写入性能 |
| innodb_flush_log_at_trx_commit | 2 性能高,1 最安全 |
| O_DIRECT | 避免双缓存 |
max_connections = 500
thread_cache_size = 100
table_open_cache = 4000
查看当前连接数:
SHOW STATUS LIKE 'Threads_connected';
query_cache_type = 0
query_cache_size = 0
✅ 建议关闭
innodb_file_per_table = ON
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
SSD 可进一步提高 io_capacity。
查看慢查询:
SHOW VARIABLES LIKE 'slow_query_log';
开启慢查询:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
分析 SQL:
EXPLAIN SELECT ...
TEXT / BLOBSHOW ENGINE INNODB STATUS\G
SHOW PROCESSLIST;
SHOW GLOBAL STATUS;
OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;
⚠️ 大表慎用 OPTIMIZE,会锁表。
Debian 默认是 MariaDB,如果你需要 MySQL:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb
dpkg -i mysql-apt-config_0.8.28-1_all.deb
apt update
apt install mysql-server
systemctl edit mysql
[Service]
MemoryLimit=12G
innodb_buffer_pool_size 是否合理SHOW ENGINE INNODB STATUS你可以直接贴:
free -h
cat /etc/mysql/mysql.conf.d/mysqld.cnf