在 Debian 上优化 MySQL(通常是 MySQL 或 MariaDB)性能,可以从系统层、MySQL 配置、Schema 与查询、监控四个方面入手。下面给出一个相对实用、循序渐进的优化清单。
free -h
swapon --show
vm.swappiness=10
写入 /etc/sysctl.conf 后执行:sysctl -p
noatime,nodiratime
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
配置文件位置(Debian):
/etc/mysql/mysql.conf.d/mysqld.cnf
# 或
/etc/mysql/mariadb.conf.d/50-server.cnf
innodb_buffer_pool_size = 物理内存的 60%~75%
innodb_buffer_pool_instances = 4~8
示例(8G 内存):
innodb_buffer_pool_size = 6G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 性能优先
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
⚠️
trx_commit=2有极小数据丢失风险,金融场景慎用
max_connections = 300~500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300
query_cache_type = 0 # 8.0 已移除
高并发写场景建议关闭
WHERE DATE(create_time) = ...
LIKE '%abc'
开启慢查询日志:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
分析工具:
mysqldumpslow -s t /var/log/mysql/slow.log
# 或
pt-query-digest
SHOW GLOBAL STATUS;
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
OPTIMIZE TABLE xxx; -- 谨慎使用
ANALYZE TABLE xxx;
htop, iostatmytopPrometheus + GrafanaPercona Toolkit✅ innodb_buffer_pool_size 是否合理
✅ 是否开启慢查询日志
✅ 是否存在全表扫描
✅ swap 是否频繁
✅ 磁盘 IO 是否瓶颈
如果你愿意,可以告诉我:
我可以给你针对性配置示例。