温馨提示×

怎样优化linux mysql

小樊
34
2026-10-12 13:38:30
栏目: 云计算

优化 Linux 上的 MySQL 是一个系统工程,通常从系统层、MySQL 配置、Schema/SQL、运维监控四个层面入手。下面按“由浅入深、可落地”的方式给你一份实用清单。


一、Linux 系统层优化(基础)

1. 文件系统与磁盘

  • 使用 XFS / ext4
  • 挂载参数建议:
    noatime,nodiratime
    
  • 磁盘优先使用 SSD / NVMe
  • 分离数据盘与日志盘(可选)

2. 内核参数(/etc/sysctl.conf)

vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
net.core.somaxconn = 65535

3. 资源限制(/etc/security/limits.conf)

mysql soft nofile 65535
mysql hard nofile 65535

4. 关闭不必要服务

  • 关闭 firewalld(若用云安全组)
  • 关闭 selinux(生产可设为 permissive)

二、MySQL 配置优化(核心)

1. 内存相关(最重要)

innodb_buffer_pool_size = 物理内存的 60%~75%
innodb_buffer_pool_instances = 4~8

示例(16G 内存):

innodb_buffer_pool_size = 12G

2. InnoDB 优化

innodb_log_file_size = 512M~1G
innodb_flush_log_at_trx_commit = 2   # 性能优先
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON

3. 连接与线程

max_connections = 500~2000
thread_cache_size = 100
wait_timeout = 300
interactive_timeout = 300

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

  • MySQL 5.7 及以下:
query_cache_type = 0   # 高并发建议关闭

5. 慢查询日志

slow_query_log = ON
long_query_time = 0.5
log_queries_not_using_indexes = ON

三、数据库设计与 SQL 优化(见效最快)

1. 索引优化

  • 高频 WHERE / JOIN / ORDER BY 字段加索引
  • 避免:
    • 函数索引失效
    • 隐式类型转换
    • 前导模糊查询 LIKE '%xx'

2. SQL 优化

  • 避免 SELECT *
  • 避免大事务
  • 分页优化:
    WHERE id > ? ORDER BY id LIMIT 10
    

3. 表结构

  • 使用合适类型(INT 而非 BIGINT)
  • 避免过度宽表
  • 大表考虑分区 / 分表

四、架构与运维优化

1. 读写分离

  • 主从复制
  • 读流量走从库

2. 连接池

  • 应用层使用:
    • HikariCP
    • Druid

3. 定期维护

ANALYZE TABLE xxx;
OPTIMIZE TABLE xxx;  -- 谨慎使用

4. 监控

  • Prometheus + mysqld_exporter
  • pt-query-digest 分析慢日志

五、快速自查清单(你可以直接做)

✅ buffer pool 是否够大
✅ 是否有慢 SQL
✅ 索引是否合理
✅ 是否有大量短连接
✅ 磁盘 IO 是否瓶颈


如果你愿意,可以告诉我:

  • MySQL 版本
  • 内存大小
  • 主要业务场景(读多 / 写多)
  • 当前 my.cnf

我可以直接帮你给出一份可用配置。

0 踩