CentOS或Ubuntu系统下,1核1G内存部署MySQL需要调整哪些关键参数?

对于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

七、安全建议

  1. 启用swap(至少1GB)防止OOM
  2. 监控工具:安装mytoppt-mysql-summary
  3. 定期维护:每周优化表碎片
  4. 备份策略:使用mysqldumpxtrabackup

注意事项

  • 根据实际应用类型调整:读多写少可适当增加innodb_buffer_pool_size
  • 使用连接池减少短连接开销
  • 考虑使用轻量级替代方案:如MariaDB或Percona Server
  • 对于生产环境,建议至少升级到2GB内存

这样的配置可以在1核1G环境下稳定运行中小型应用,支持约1000-5000 QPS的负载。

云服务器