前言
本文提供了一个针对 1GB 内存 VPS 环境优化的 MySQL 配置文件示例。请注意,此配置基于较旧的 MySQL 5.6 版本,部分参数在新版本中可能已废弃或行为改变。强烈建议您根据自身服务器负载、应用特性和 MySQL 版本进行针对性调整,切勿直接覆盖生产环境的配置文件。调整前务必做好原配置文件的备份。
配置文件下载与使用
您可以通过以下链接下载配置文件模板(ZIP 格式,解压后使用文本编辑器打开查看):my.cnf 配置文件模板 (ZIP)
核心配置参数详解
以下是对关键配置项的说明,特别是针对低内存环境的优化点。
基础与连接设置
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql/data
log-error = /data/mysql/mysql_error.log
pid-file = /data/mysql/mysql.pid
- skip-name-resolve: 禁用 DNS 反查,可加速连接建立。
- max_connections = 1000: 对于 1GB 内存的 VPS,此值可能过高。建议根据实际并发连接数调低(例如 150-300),以避免内存耗尽。
- open_files_limit 与 table_open_cache: 需根据系统允许的最大文件描述符数量进行调整。
内存与缓存优化
这是 1GB 内存环境调优的核心,需严格控制各缓冲区大小。
key_buffer_size = 4M
query_cache_size = 8M
query_cache_limit = 2M
tmp_table_size = 16M
max_heap_table_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_stack = 192K
- key_buffer_size: 仅适用于 MyISAM 表。如果主要使用 InnoDB,此值可设置得更小。
- query_cache_*: 注意,从 MySQL 5.7.20 开始,查询缓存已被弃用,并在 MySQL 8.0 中移除。如果使用新版本,应移除这些配置。
- 各种 *_buffer_size: 这些是每个连接分配的内存。高并发下,总消耗内存 = 连接数 × 各缓冲区之和。务必谨慎设置,防止 OOM(内存溢出)。
InnoDB 存储引擎配置
#skip-innodb
innodb_buffer_pool_size = 16M
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_flush_log_at_trx_commit = 1
innodb_thread_concurrency = 4
- innodb_buffer_pool_size: 这是 InnoDB 最重要的缓存,用于缓存表数据和索引。在 1GB 内存的服务器上,此值设置过小(仅 16M)会严重限制性能。建议可以提升至 128M - 256M,为系统和其他进程留出足够内存。
- innodb_flush_log_at_trx_commit = 1: 提供完整的 ACID 保证,但写入性能最低。如果对数据一致性要求可稍微放宽,可设置为 2 以提升性能。
二进制日志与复制
log-bin = /data/mysql/binlog/binlog
binlog_format = mixed
expire_logs_days = 30
server-id = 1
- expire_logs_days: 自动清理旧的二进制日志,防止磁盘被占满。
超时设置
interactive_timeout = 86400
wait_timeout = 86400
将空闲连接超时时间设置为 24 小时(86400 秒),有助于减少频繁建立连接的开销,但会长期占用连接资源。请根据应用连接模式调整。
重要更新与注意事项
- MySQL 版本演进: 原文配置基于 MySQL 5.6。如果您使用的是 MySQL 5.7 或 8.0,许多参数(如
query_cache_size、innodb_additional_mem_pool_size)已失效或默认值已优化。请务必参考对应版本的官方手册。 - 存储引擎选择: 示例中
default-storage-engine = MyISAM。对于现代应用,强烈建议使用 InnoDB 作为默认引擎,因为它支持事务、行级锁和崩溃恢复,是大多数场景下的更好选择。 - 内存分配原则: 1GB 内存的 VPS 上运行 MySQL,必须遵循“总量控制”原则。所有内存相关参数(尤其是 per-connection 的缓冲区)之和,必须远小于可用物理内存,并为操作系统和其他应用预留空间(建议至少 20-30%)。
- 监控与调整: 配置不是一劳永逸的。应用上线后,应通过
SHOW GLOBAL STATUS、SHOW ENGINE INNODB STATUS等命令监控数据库运行状态,并根据实际情况持续优化。
总结
为低内存 VPS 配置 MySQL 是一项精细的工作,核心在于平衡性能与资源消耗。本文提供的模板是一个起点,但最重要的步骤是理解每个参数的含义,并结合您的具体硬件、软件版本和应用负载进行测试与调整。始终牢记:修改配置前先备份,修改后重启 MySQL 服务生效,并密切监控系统资源使用情况。