对于1核1G内存的服务器部署MySQL,需要重点优化内存使用和连接数,避免OOM和性能问题。以下是关键参数调整建议:
一、核心内存参数(关键)
# InnoDB缓冲池(最大占用约512MB)
innodb_buffer_pool_size = 256M # 物理内存的25-30%
# 查询缓存(MySQL 8.0已移除,5.7可考虑禁用)
# query_cache_type = 0
# query_cache_size = 0
# 临时表内存
tmp_table_size = 32M
max_heap_table_size = 32M
# 连接相关内存
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
二、连接数限制
# 控制并发连接数
max_connections = 50 # 默认151过大
thread_cache_size = 8
# 每个线程内存
thread_stack = 256K
三、InnoDB优化
# 减少刷盘频率
innodb_flush_log_at_trx_commit = 2 # 平衡性能与安全
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
# 减少I/O线程
innodb_read_io_threads = 2
innodb_write_io_threads = 2
四、系统级优化
CentOS/RHEL:
# 1. 调整内核参数
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
sysctl -p
# 2. 安装性能工具
yum install -y tuned
tuned-adm profile throughput-performance
Ubuntu/Debian:
# 1. 调整内核参数
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
# 2. 使用systemd限制内存(MySQL 5.7+/8.0)
# 编辑 /etc/systemd/system/mysql.service.d/limits.conf
[Service]
LimitNOFILE=65535
LimitAS=900M # 限制最大内存
五、配置文件示例(my.cnf)
[mysqld]
# 基础设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
# 内存优化
innodb_buffer_pool_size=256M
key_buffer_size=32M
tmp_table_size=32M
max_heap_table_size=32M
# 连接控制
max_connections=50
thread_cache_size=8
table_open_cache=256
# InnoDB设置
innodb_log_file_size=64M
innodb_flush_log_at_trx_commit=2
innodb_lock_wait_timeout=50
# 查询优化
query_cache_type=0
query_cache_size=0
sort_buffer_size=2M
join_buffer_size=2M
# 日志设置
slow_query_log=1
long_query_time=2
log_queries_not_using_indexes=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
六、部署后检查
-- 监控内存使用
SHOW VARIABLES LIKE '%buffer%';
SHOW VARIABLES LIKE '%cache%';
SHOW VARIABLES LIKE '%connection%';
-- 查看实际内存占用
SHOW ENGINE INNODB STATUSG
七、安全建议
- 启用swap(至少1GB)防止OOM
- 监控工具:安装
mytop或pt-mysql-summary - 定期维护:每周优化表碎片
- 备份策略:使用
mysqldump或xtrabackup
注意事项
- 根据实际应用类型调整:读多写少可适当增加
innodb_buffer_pool_size - 使用连接池减少短连接开销
- 考虑使用轻量级替代方案:如MariaDB或Percona Server
- 对于生产环境,建议至少升级到2GB内存
这样的配置可以在1核1G环境下稳定运行中小型应用,支持约1000-5000 QPS的负载。
CLOUD技术笔记