Linux 上 MySQL 内存配置优化实操指南
一 核心原则与快速估算
二 关键参数建议与适用场景
| 参数 | 作用 | 建议范围 | 说明 |
|---|---|---|---|
| innodb_buffer_pool_size | InnoDB 数据与索引缓存 | 物理内存的50%–75%(专用机可至70%–80%) | 命中率长期低于**95%**可适当上调 |
| innodb_log_file_size | 重做日志文件大小 | 128M–512M | 大事务/高写入可适当增大 |
| innodb_log_buffer_size | 事务日志缓冲 | 8M–64M | 大批量写入/无主键批量导入可上调 |
| innodb_flush_log_at_trx_commit | 日志刷盘策略 | 1(强一致)/ 2(高吞吐) | 0/2 吞吐更高但崩溃可能丢1秒数据 |
| key_buffer_size | MyISAM 索引缓存 | 如仍用 MyISAM:8M–512M | 全 InnoDB 场景可保持较小 |
| query_cache_size / query_cache_type | 结果缓存 | 5.7 及以下:按需小值或关闭;8.0:不可用 | 高并发写场景命中率通常较差 |
| tmp_table_size / max_heap_table_size | 内存临时表上限 | 两者取小,建议64M–256M | 关注磁盘临时表比例,不宜过大 |
| sort_buffer_size / join_buffer_size / read_buffer_size / read_rnd_buffer_size | 会话级操作缓冲 | 小步上调(如 8M/64M/2M/2M 起) | 仅在确有排序/连接/扫描瓶颈时调大 |
| max_connections | 最大并发连接 | 结合连接池与业务评估 | 过高会放大线程独享内存 |
| thread_cache_size | 线程复用 | 建议50–200 | 降低频繁建连开销 |
| table_open_cache / table_definition_cache | 表句柄/元数据缓存 | 依库表规模设置 | 减少打开表文件与元数据开销 |
| binlog_cache_size / max_binlog_cache_size | 事务级 binlog 缓冲 | 2M–16M / 适当上限 | 大事务需关注是否超限报错 |
| performance_schema_max_table_instances / table_definition_cache | PS/表定义缓存 | 适度限制 | 降低监控与元数据内存占用 |
| 以上建议需结合实际负载与监控逐步微调,避免一次性大幅改动。 |
三 诊断与监控步骤
四 示例配置与动态调整
五 系统与稳定性设置