温馨提示×

ubuntu mysql怎样优化性能

小樊
47
2026-10-27 14:47:32
栏目: 云计算

在 Ubuntu 上优化 MySQL 性能,一般可以从 系统层面、MySQL 配置、Schema 与 SQL、监控与维护 四个方面入手。下面给你一份比较实用、可落地的优化清单(以 MySQL 5.7 / 8.0 为例)。


一、系统层面优化(Ubuntu)

1. 使用合适的硬件

  • 内存:MySQL 非常依赖内存,InnoDB Buffer Pool 尽量大
  • 磁盘:优先 SSD / NVMe
  • CPU:高并发场景多核更有优势

2. 文件系统与挂载参数

推荐 ext4 / xfs:

mount -o noatime,nodiratime /dev/sdb /var/lib/mysql

3. Swappiness 降低

避免 MySQL 被 swap:

sysctl -w vm.swappiness=1

写入 /etc/sysctl.conf 持久化。

4. 文件描述符限制

ulimit -n 65535

在 /etc/security/limits.conf 中配置 mysql 用户。


二、MySQL 核心参数优化(重点)

配置文件一般位于:

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

1. InnoDB Buffer Pool(最重要)

innodb_buffer_pool_size = 4G   # 物理内存的 60%~80%
innodb_buffer_pool_instances = 4

2. 日志与写入优化

innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # 性能优先(可接受少量丢数据)
innodb_flush_method = O_DIRECT

3. 连接与线程

max_connections = 500
thread_cache_size = 100

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

MySQL 5.7:

query_cache_type = 0
query_cache_size = 0

5. 临时表与排序

tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M

三、数据库设计与 SQL 优化

1. 索引优化

  • 为 WHERE / JOIN / ORDER BY 字段建索引
  • 避免:
    • 函数索引失效
    • 隐式类型转换
    • LIKE '%xx'
EXPLAIN SELECT * FROM user WHERE email='a@b.com';

2. 表结构优化

  • 使用合适的数据类型(INT 而非 VARCHAR)
  • 避免过度宽表
  • 大字段拆分(TEXT / BLOB)

3. SQL 优化

  • 避免 SELECT *
  • 避免 ORDER BY RAND()
  • 批量插入代替循环插入

四、维护与监控

1. 定期维护

OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;

2. 慢查询日志

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

3. 监控工具

  • mysqltuner
  • pt-query-digest
  • Prometheus + Grafana
  • SHOW PROCESSLIST;
  • SHOW ENGINE INNODB STATUS;

五、常见场景建议

场景 建议
读多写少 加大 buffer pool,加从库
写密集 SSD + 调整 redo log
高并发 连接池 + 读写分离
大数据量 分库分表 / 分区表

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

  • MySQL 版本
  • 数据量 & 并发量
  • 当前 my.cnf
  • 主要慢查询 SQL

我可以帮你 针对性调优甚至直接改配置。

0 踩