温馨提示×

ubuntu mysql怎么优化性能

小樊
41
2026-09-03 23:39:25
栏目: 云计算

在 Ubuntu 上优化 MySQL 性能,通常可以从系统层面、MySQL 配置、 Schema 与 SQL、运维监控几个方面入手。下面给你一套实用、可落地的优化思路(以 MySQL 5.7 / 8.0 为主)。


一、系统层面优化(Ubuntu)

1. 使用合适的内存

  • MySQL 很吃内存,InnoDB Buffer Pool 尽量大
  • 建议:
    • 专用数据库服务器:innodb_buffer_pool_size = 物理内存的 60%~80%
    • 混合服务器:50% 左右

2. 文件系统和磁盘

  • 推荐使用:
    • ext4 / xfs
    • SSD / NVMe 效果最明显
  • 挂载参数建议:
noatime,nodiratime

3. 内核参数(可选)

# 增加文件描述符
ulimit -n 65535

# /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 1024

二、MySQL 核心配置优化(最重要)

配置文件位置:

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

1. InnoDB 关键参数

[mysqld]
innodb_buffer_pool_size = 4G        # 根据内存调整
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # 性能优先(可接受少量丢数据)
innodb_flush_method = O_DIRECT

2. 连接与线程

max_connections = 500
thread_cache_size = 50
wait_timeout = 300

3. 查询缓存(注意)

  • MySQL 8.0 已移除 Query Cache
  • 5.7 若读多写少可开:
query_cache_type = 1
query_cache_size = 64M

三、数据库设计与 SQL 优化

1. 索引优化(最关键)

  • WHERE / JOIN / ORDER BY 字段加索引
  • 避免:
    • 函数索引失效
    • LIKE '%xx'
    • 隐式类型转换

2. 表结构设计

  • 使用合适的类型(不要都用 VARCHAR(255))
  • 大字段拆表
  • 必要时分表 / 分区

3. SQL 优化

  • 避免 SELECT *
  • 避免 COUNT(*) 全表
  • 使用 EXPLAIN 分析:
EXPLAIN SELECT * FROM user WHERE email='a@b.com';

四、慢查询与监控

1. 开启慢查询日志

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

查看:

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

2. 常用状态查看

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

五、日常维护

1. 定期优化表

OPTIMIZE TABLE table_name;

2. 使用工具

  • pt-query-digest
  • mysql tuner
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl

六、典型场景建议

场景 建议
读多写少 加大 buffer pool,开缓存
写多 调整 redo log,减少 fsync
高并发 连接池 + 限流
云服务器 用云数据库或本地 SSD

七、一句话总结

Ubuntu 上 MySQL 性能优化 = 大内存 + SSD + 合理 InnoDB 参数 + 好索引 + 慢查询分析

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

  • MySQL 版本
  • 服务器内存
  • 业务类型(读多 / 写多)
  • 当前配置文件

我可以帮你直接给出一份可用的 my.cnf 优化方案

0