在使用 2核2G 的云服务器运行 MySQL 时,资源有限,因此配置需在性能与稳定性之间取得平衡。以下是一个适用于 MySQL 5.7 或 8.0 的推荐 my.cnf 配置参数,适合小规模应用或开发环境。
📄 推荐的 my.cnf 配置(适用于 2核2G)
[mysqld]
# 基础设置
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
# 连接相关
max_connections = 150
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600
skip-name-resolve
# 缓冲区和内存设置(关键)
key_buffer_size = 32M
max_allowed_packet = 64M
table_open_cache = 400
sort_buffer_size = 256K
join_buffer_size = 256K
read_buffer_size = 128K
read_rnd_buffer_size = 256K
# InnoDB 设置(重点优化)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 128M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_thread_concurrency = 2
innodb_read_io_threads = 2
innodb_write_io_threads = 2
# 查询缓存(MySQL 8.0 已移除,5.7 可用)
query_cache_type = 1
query_cache_size = 32M
query_cache_limit = 2M
# 日志设置
log-bin = mysql-bin
binlog_format = ROW
server-id = 1
expire_logs_days = 7
# 其他优化
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /var/log/mysql/slow.log
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
🔍 参数说明与建议
| 参数 | 推荐值 | 说明 |
|---|---|---|
innodb_buffer_pool_size |
1G | InnoDB 缓存数据和索引的核心,2G 内存建议设为 1G,避免系统内存不足 |
max_connections |
150 | 默认 151,适当控制连接数防内存耗尽 |
key_buffer_size |
32M | MyISAM 索引缓存,现代应用多用 InnoDB,无需太大 |
query_cache_size |
32M | 仅适用于 MySQL 5.7;8.0 不支持,可删除 |
innodb_log_file_size |
128M | 合理的日志文件大小,提升写入性能 |
innodb_flush_log_at_trx_commit |
1 | 安全模式(每次提交刷盘),如可接受轻微数据丢失可设为 2 提升性能 |
table_open_cache |
400 | 打开表的缓存,避免频繁打开关闭 |
skip-name-resolve |
ON | 跳过 DNS 解析,加快连接速度 |
⚠️ 注意事项
-
不要超过物理内存限制:
innodb_buffer_pool_size + 其他进程内存 < 1.5G,给操作系统和其他服务留足空间。 -
MySQL 8.0 特别提醒:
- 移除了
query_cache_*相关参数,需删除。 - 默认字符集已是
utf8mb4,但仍建议显式设置。
- 移除了
-
首次修改
innodb_log_file_size需停机操作:systemctl stop mysql mv /var/lib/mysql/ib_logfile* /tmp/ systemctl start mysql # 会自动重建日志文件 -
监控实际负载:
使用top,htop,mysqladmin processlist,SHOW ENGINE INNODB STATUS观察性能瓶颈。 -
备份配置文件:
修改前备份原my.cnf,防止配置错误导致 MySQL 无法启动。
✅ 总结
此配置适合 低并发、中小型网站或测试环境。若未来访问量上升,建议升级服务器配置或引入读写分离、缓存(Redis)等优化手段。
💡 提示:可以使用 MySQLTuner 工具分析当前配置并给出优化建议。
wget http://mysqltuner.pl
perl mysqltuner.pl
它会根据你的实际运行情况给出更精准的调优建议。
CLOUD技术笔记