- 内存相关配置
innodb_buffer_pool_size:这是 InnoDB 存储引擎最重要的参数,用于缓存数据和索引。建议设置为服务器可用内存的 50%-70%(对于专用数据库服务器)。
innodb_buffer_pool_size = 8G # 根据服务器内存调整
innodb_log_buffer_size:用于缓存 InnoDB 日志。对于写入频繁的系统,可适当调大(默认 16M):
innodb_log_buffer_size = 64M
key_buffer_size:用于 MyISAM 表的索引缓存(如果使用 MyISAM):
key_buffer_size = 256M
query_cache_size:注意 MySQL 8.0 已移除查询缓存,对于 5.7 及以下版本,如果查询重复率高可开启:
query_cache_size = 64M
query_cache_type = 1
- 连接与线程配置
max_connections:最大并发连接数,根据业务需求调整:
max_connections = 1000
thread_cache_size:线程缓存大小,减少创建新线程的开销:
thread_cache_size = 64
wait_timeout 和 interactive_timeout:控制空闲连接超时时间,避免连接泄露:
wait_timeout = 600
interactive_timeout = 600
- InnoDB 存储引擎优化
innodb_flush_log_at_trx_commit:控制事务日志刷新策略:
1(默认):每次事务提交都刷新到磁盘,最安全但性能较低
0:每秒刷新一次,性能好但可能丢失 1 秒数据
2:提交时写入日志文件但不立即刷新到磁盘
innodb_flush_log_at_trx_commit = 1 # 对数据安全性要求高时使用
innodb_file_per_table:为每个表创建独立的表空间,便于管理:
innodb_file_per_table = 1
innodb_log_file_size 和 innodb_log_files_in_group:日志文件大小和数量:
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_flush_method:控制 InnoDB 如何刷新数据到磁盘,建议在 Linux 下使用 O_DIRECT:
innodb_flush_method = O_DIRECT
- 查询优化相关
slow_query_log:开启慢查询日志,便于定位性能问题:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 # 超过2秒的查询记录为慢查询
join_buffer_size:表连接缓存,不宜过大(默认 256K):
join_buffer_size = 256K
sort_buffer_size:排序缓存,每个连接独占,不宜过大:
sort_buffer_size = 2M
- 其他重要配置
max_allowed_packet:控制最大数据包大小,对于大字段(如 TEXT)需要调大:
max_allowed_packet = 64M
table_open_cache:表缓存数量,根据数据库表数量调整:
table_open_cache = 2048
innodb_read_io_threads 和 innodb_write_io_threads:IO 线程数量,多核服务器可增加:
innodb_read_io_threads = 8
innodb_write_io_threads = 8
优化建议
根据工作负载调整:OLTP(事务处理)和 OLAP(分析处理) workload 需要不同的配置
逐步调整:每次只修改少数参数,测试性能变化
监控效果:使用SHOW STATUS、SHOW VARIABLES和EXPLAIN等工具监控优化效果
定期更新统计信息:执行ANALYZE TABLE或开启innodb_stats_auto_recalc
考虑硬件因素:配置应与服务器硬件(CPU、内存、磁盘类型)相匹配
配置优化后,需要重启 MySQL 服务使更改生效,并通过实际负载测试验证优化效果。