在2核4G的服务器上安装MySQL,需要针对有限资源进行优化。以下是关键参数调整建议:
一、核心参数调整
1. 内存相关参数
# 缓冲池大小(最重要)
innodb_buffer_pool_size = 1G # 建议为物理内存的50-60%
# 连接相关内存
key_buffer_size = 64M
query_cache_size = 0 # MySQL 8.0已移除,5.7建议设为0
# 临时表内存
tmp_table_size = 64M
max_heap_table_size = 64M
# 每个连接的内存
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
2. 连接和线程配置
# 最大连接数(根据应用调整)
max_connections = 150
# 线程缓存
thread_cache_size = 16
# 表缓存
table_open_cache = 1024
table_definition_cache = 1024
3. InnoDB优化
# 日志文件大小
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
# 刷写策略
innodb_flush_log_at_trx_commit = 1 # 数据安全优先
# 或设置为2(性能优先,可能丢失1秒数据)
innodb_flush_method = O_DIRECT # Linux系统推荐
# IO线程数
innodb_read_io_threads = 4
innodb_write_io_threads = 4
二、系统级优化
1. 文件描述符限制
# 编辑 /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535
2. 内核参数(CentOS/RHEL)
# /etc/sysctl.conf
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
三、配置文件示例
MySQL 5.7 / 8.0 最小化配置
[mysqld]
# 基础配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 内存优化
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
key_buffer_size=64M
# 连接管理
max_connections=150
thread_cache_size=16
# 性能优化
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_file_per_table=ON
# 查询优化
query_cache_type=0 # 5.7版本
query_cache_size=0
# 日志(可选)
slow_query_log=ON
long_query_time=2
四、安装后检查
-
验证配置生效
SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SHOW VARIABLES LIKE 'max_connections'; -
监控资源使用
# 查看内存使用 free -h
查看MySQL内存占用
ps aux | grep mysqld
监控连接数
mysqladmin status
## 五、根据工作负载调整
### 如果是**读密集型**应用:
```ini
innodb_buffer_pool_size = 2G
innodb_read_io_threads = 8
read_buffer_size = 2M
如果是写密集型应用:
innodb_log_file_size = 512M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
如果是混合负载:
innodb_buffer_pool_size = 1.5G
innodb_log_file_size = 384M
六、重要提醒
- 逐步调整:每次只修改1-2个参数,观察效果
- 监控工具:使用
mysqltuner或pt-mysql-summary进行分析 - 版本差异:
- MySQL 5.7:需要关注query_cache设置
- MySQL 8.0:默认配置更优,主要调整buffer_pool_size
- 备份配置:修改前备份
my.cnf文件
七、快速检查脚本
#!/bin/bash
# 检查当前MySQL配置
mysql -e "SHOW VARIABLES WHERE Variable_name IN ('innodb_buffer_pool_size', 'max_connections', 'key_buffer_size');"
mysql -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
这些调整可以在2核4G环境下平衡性能和稳定性。根据实际应用负载进行微调。
CLOUD技术笔记