在 Ubuntu 上优化 MySQL 性能,通常可以从系统层面、MySQL 配置、 Schema 与 SQL、运维监控几个方面入手。下面给你一套实用、可落地的优化思路(以 MySQL 5.7 / 8.0 为主)。
innodb_buffer_pool_size = 物理内存的 60%~80%noatime,nodiratime
# 增加文件描述符
ulimit -n 65535
# /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 1024
配置文件位置:
/etc/mysql/mysql.conf.d/mysqld.cnf
[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
max_connections = 500
thread_cache_size = 50
wait_timeout = 300
query_cache_type = 1
query_cache_size = 64M
WHERE / JOIN / ORDER BY 字段加索引LIKE '%xx'SELECT *COUNT(*) 全表EXPLAIN 分析:EXPLAIN SELECT * FROM user WHERE email='a@b.com';
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
SHOW PROCESSLIST;
SHOW GLOBAL STATUS LIKE 'Threads%';
SHOW ENGINE INNODB STATUS;
OPTIMIZE TABLE table_name;
pt-query-digestmysql tunerwget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
perl mysqltuner.pl
| 场景 | 建议 |
|---|---|
| 读多写少 | 加大 buffer pool,开缓存 |
| 写多 | 调整 redo log,减少 fsync |
| 高并发 | 连接池 + 限流 |
| 云服务器 | 用云数据库或本地 SSD |
Ubuntu 上 MySQL 性能优化 = 大内存 + SSD + 合理 InnoDB 参数 + 好索引 + 慢查询分析
如果你愿意,可以告诉我:
我可以帮你直接给出一份可用的 my.cnf 优化方案。