温馨提示×

linux mysql如何优化

小樊
35
2026-10-09 15:40:29
栏目: 云计算

在 Linux 环境下优化 MySQL,通常可以从 系统层、MySQL 配置、Schema 与 SQL、监控与维护 四个维度来做。下面给你一个实用、可落地的优化思路(以 InnoDB 为主,适用于大多数业务场景)。


一、系统层优化(Linux)

1. 文件系统与磁盘

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

2. 内核参数

# 提高文件描述符
ulimit -n 65535

# 系统层面
vm.swappiness = 5
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

3. 关闭不必要的服务

  • 减少 CPU / IO 竞争
  • 避免 swap 频繁使用

二、MySQL 配置优化(my.cnf)

1. 内存相关(最关键)

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

示例(16G 内存):

innodb_buffer_pool_size = 10G

2. IO 与线程

innodb_flush_log_at_trx_commit = 2   # 性能优先
sync_binlog = 0                      # 性能优先(主从需注意)

innodb_io_capacity = 2000            # SSD 可提高
innodb_io_capacity_max = 4000

3. 连接与线程

max_connections = 500
thread_cache_size = 50

4. 日志

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

三、数据库设计与 SQL 优化

1. 表结构设计

  • 使用 InnoDB
  • 合理选择字段类型:
    • INT 而非 BIGINT
    • VARCHAR 而非 TEXT
  • 避免 NULL,用默认值

2. 索引优化

  • 为 WHERE / JOIN / ORDER BY 字段建索引
  • 使用 联合索引(最左前缀)
  • 避免:
    • 索引列使用函数
    • 隐式类型转换
    • LIKE '%xx'

3. SQL 优化

  • 避免 SELECT *
  • 避免大事务
  • 分页优化:
    -- 不推荐
    LIMIT 1000000, 10
    
    -- 推荐
    WHERE id > 1000000 LIMIT 10
    

四、监控与维护

1. 慢查询分析

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

2. 常用状态查看

SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
SHOW GLOBAL STATUS LIKE 'Threads%';

3. 定期维护

  • OPTIMIZE TABLE(小表)
  • 定期 ANALYZE TABLE
  • 清理 binlog:
    PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY;
    

五、典型场景建议

场景 建议
读多写少 加大 buffer pool,加从库
写多读少 减少索引,批量插入
高并发 连接池 + 读写分离
大数据量 分库分表 / 分区表

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

  • MySQL 版本
  • 服务器配置(CPU / 内存 / 磁盘)
  • 主要业务类型(电商 / 日志 / 后台)

我可以直接帮你 给出一份可复制的 my.cnf 配置。

0 踩