温馨提示×

如何调优debian mysql性能

小樊
35
2026-09-26 02:15:13
栏目: 云计算

在 Debian 上调优 MySQL(通常为 MySQL 或 MariaDB)性能,可以从系统层、MySQL 配置、Schema 与 SQL、监控四个方面入手。下面是一套比较实用、可落地的调优思路。


一、先确认环境与版本

lsb_release -a
mysql -V
# 或
mariadb -V

确认是 MySQL 还是 MariaDB,二者参数略有差异。


二、系统层调优(Debian)

1. 内存与 Swap

  • 物理内存越大,InnoDB buffer pool 可越大
  • Swap 不建议禁用,但 swappiness 可降低
sysctl vm.swappiness=10

写入 /etc/sysctl.conf:

vm.swappiness=10

2. 文件系统与 IO

  • 推荐使用 ext4 / xfs
  • 挂载选项(示例):
/dev/sdb /var/lib/mysql ext4 defaults,noatime 0 2
  • 禁用 atime 可减少磁盘写

3. 内核参数(高并发)

fs.file-max = 655350
net.core.somaxconn = 65535

三、MySQL 核心参数调优(最重要)

配置文件位置:

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

1. InnoDB(最关键)

innodb_buffer_pool_size = 4G        # 物理内存的 60%~70%
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # 性能优先(可接受少量丢失)
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000           # SSD 可更高

⚠️ 修改 innodb_log_file_size 需干净关闭 MySQL


2. 连接与线程

max_connections = 500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300

避免:

  • max_connections 过大导致内存爆掉

3. 查询缓存(MySQL 5.7 及以前)

query_cache_type = 0
query_cache_size = 0

MySQL 8 已移除查询缓存


4. 慢查询日志(必须先开)

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

分析:

mysqldumpslow -s t /var/log/mysql/slow.log

四、Schema 与 SQL 层优化

1. 索引

  • 高频 WHERE / JOIN / ORDER BY 字段加索引
  • 避免:
    • 索引字段使用函数
    • 隐式类型转换

2. SQL 优化

  • 避免 SELECT *
  • 避免 LIKE '%xxx%'
  • 分页避免 LIMIT 100000,10

3. 表结构

  • 合理选择数据类型(INT vs BIGINT)
  • 大表考虑分区

五、监控与压测

1. 内置状态

SHOW GLOBAL STATUS;
SHOW ENGINE INNODB STATUS;

2. 工具

  • mysqltuner
  • pt-query-digest
  • Prometheus + mysqld_exporter
apt install mysqltuner
mysqltuner

3. 压测

sysbench oltp_read_write --threads=16 run

六、典型场景建议

场景 建议
读多写少 加大 buffer pool,考虑只读从库
写密集 调整 redo log,使用 SSD
高并发 优化连接池,减少短连接
内存小 降低 buffer pool,避免 swap

七、安全重启

systemctl restart mysql

如修改关键参数失败:

journalctl -u mysql

如果你能提供:

  • Debian 版本
  • MySQL / MariaDB 版本
  • 内存大小
  • 应用类型(Web / 分析 / 高并发)

我可以给你一套针对性的 my.cnf 示例配置。

0 踩