在京东云2核2G的服务器上安装和运行 MySQL 5.7,由于资源有限(尤其是内存较小),必须进行合理的配置优化,以确保数据库稳定运行、避免内存溢出或性能下降。以下是关键的配置优化建议:
一、系统层面优化
1. 关闭不必要的服务
- 停用或禁用非必要的后台服务(如蓝牙、打印服务等),释放系统资源。
- 使用
systemctl list-unit-files --type=service查看并关闭无用服务。
2. 调整文件句柄数
MySQL 需要较多文件句柄,修改系统限制:
# 临时设置
ulimit -n 65536
# 永久设置:编辑 /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
3. 使用 swap 分区(重要)
2G 内存容易发生 OOM(Out of Memory),建议配置至少 1~2GB 的 swap 空间:
# 创建 2GB swap 文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 开机自动挂载:编辑 /etc/fstab,添加
/swapfile none swap sw 0 0
二、MySQL 配置优化(my.cnf)
编辑 /etc/my.cnf 或 /etc/mysql/my.cnf,在 [mysqld] 段落中添加以下配置:
[mysqld]
# 基础设置
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
skip-name-resolve # 禁用DNS反向解析,提升连接速度
lower_case_table_names = 1 # 表名不区分大小写(适用于Linux)
# 内存相关(重点!2G内存需严格控制)
key_buffer_size = 16M # MyISAM索引缓存,小值即可
max_allowed_packet = 16M # 允许最大包大小
table_open_cache = 400 # 打开表的缓存数量
tmp_table_size = 32M # 内存临时表大小
max_heap_table_size = 32M # 内存表最大大小
sort_buffer_size = 512K # 排序缓冲区,不要设太大
join_buffer_size = 512K # JOIN 缓冲区
read_buffer_size = 256K # 顺序读缓冲
read_rnd_buffer_size = 256K # 随机读缓冲
# InnoDB 设置(核心引擎)
innodb_buffer_pool_size = 512M # 最重要的参数!占物理内存 ~25%~40%
innodb_log_file_size = 128M # 日志文件大小,平衡恢复时间和I/O
innodb_log_buffer_size = 16M # 日志缓冲区,减少磁盘写入
innodb_flush_log_at_trx_commit = 2 # 提升性能,牺牲一点持久性(可接受)
innodb_flush_method = O_DIRECT # 减少双缓冲
innodb_file_per_table = ON # 每个表独立表空间
innodb_thread_concurrency = 4 # CPU核数 * 2,避免线程争抢
innodb_io_capacity = 200 # SSD可设更高,HDD保持200左右
# 连接相关
max_connections = 100 # 根据应用需求调整,避免过高耗内存
wait_timeout = 60 # 非交互连接超时(秒)
interactive_timeout = 60 # 交互连接超时
connect_timeout = 10 # 连接超时
# 日志与安全
log-error = /var/log/mysqld.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2 # 记录超过2秒的慢查询
⚠️ 注意:
innodb_buffer_pool_size = 512M是关键,2G内存下不宜超过 768M,否则可能引发 swap 或 OOM。
三、安装与安全建议
1. 使用官方 YUM 安装(推荐)
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-server
2. 初始化并设置密码
sudo systemctl start mysqld
# 查看临时密码
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword!';
3. 运行安全脚本
mysql_secure_installation
删除匿名用户、禁止远程 root 登录、删除 test 数据库等。
四、监控与调优建议
1. 监控内存使用
free -h
top
# 查看MySQL进程内存占用
ps aux | grep mysqld
2. 检查慢查询日志
定期分析慢查询,优化 SQL 和索引。
3. 使用 mysqltuner.pl(可选)
下载 mysqltuner.pl 进行配置建议分析:
perl mysqltuner.pl
注意:仅作参考,不可盲目采纳所有建议。
五、适用场景提醒
- 此配置适用于 轻量级应用,如小型网站、开发测试环境、内部管理系统。
- 不适合高并发、大数据量、复杂事务场景。
- 如业务增长,建议升级到 4核4G 或以上配置,并考虑主从复制、读写分离。
总结
| 项目 | 推荐值 |
|---|---|
innodb_buffer_pool_size |
512M |
max_connections |
100 |
key_buffer_size |
16M |
tmp_table_size / max_heap_table_size |
32M |
| Swap 空间 | 2GB |
skip-name-resolve |
启用 |
通过上述优化,可在 2核2G 的京东云服务器上稳定运行 MySQL 5.7,兼顾性能与稳定性。
CLOUD技术笔记