温馨提示×

MySQL在Debian上如何优化

小樊
39
2026-08-14 23:09:02
栏目: 云计算

在 Debian 上优化 MySQL(或 MariaDB)通常从 系统层面、MySQL 配置、表结构、查询、监控 五方面入手。下面给你一套实用、可落地的优化指南,适合生产环境。


一、系统层面优化(Debian)

1. 使用合适的文件系统

推荐:

  • ext4 ✅(稳定)
  • xfs ✅(大文件、高并发性能更好)
df -Th

2. 关闭 swap(或降低使用)

MySQL 对 swap 非常敏感:

swapoff -a

永久关闭:

vim /etc/fstab
# 注释 swap 行

或者降低 swappiness:

sysctl vm.swappiness=1

3. 调整系统限制

vim /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535

4. 使用独立磁盘(强烈建议)

  • 数据盘与系统盘分离
  • SSD > HDD

二、MySQL 配置优化(核心)

配置文件位置:

/etc/mysql/mysql.conf.d/mysqld.cnf

1. 基础内存配置(示例:16G 内存)

[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 避免双缓存

2. 连接与线程优化

max_connections = 500
thread_cache_size = 100
table_open_cache = 4000

查看当前连接数:

SHOW STATUS LIKE 'Threads_connected';

3. 查询缓存(MySQL 8 已移除)

  • MySQL 5.7 及以下:
query_cache_type = 0
query_cache_size = 0

建议关闭


三、InnoDB 专项优化

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


四、SQL 与表结构优化(非常重要)

1. 索引优化

  • 避免全表扫描
  • 联合索引注意最左匹配

查看慢查询:

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 ...

2. 字段设计优化

  • 使用合适的数据类型
  • 少使用 TEXT / BLOB
  • 主键尽量短、递增

五、监控与维护

1. 常用监控命令

SHOW ENGINE INNODB STATUS\G
SHOW PROCESSLIST;
SHOW GLOBAL STATUS;

2. 定期维护

OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;

⚠️ 大表慎用 OPTIMIZE,会锁表。


六、Debian 特有建议

1. 使用官方 MySQL(而不是 MariaDB)

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

2. 使用 systemd 限制资源

systemctl edit mysql
[Service]
MemoryLimit=12G

七、快速优化检查清单 ✅

  • [ ] innodb_buffer_pool_size 是否合理
  • [ ] 是否关闭 swap
  • [ ] 是否开启慢查询日志
  • [ ] 是否有大量慢 SQL
  • [ ] 是否使用 SSD
  • [ ] 是否存在无用索引
  • [ ] 是否存在锁等待

八、如果你愿意,我可以:

  • ✅ 根据你的 内存大小 给出精确配置
  • ✅ 帮你分析 SHOW ENGINE INNODB STATUS
  • ✅ 分析慢查询 SQL
  • ✅ 判断是否该升级 MySQL / 拆分库表

你可以直接贴:

free -h
cat /etc/mysql/mysql.conf.d/mysqld.cnf

0