在阿里云轻量应用服务器(2GB 内存)上安装 MySQL 5.7 需要特别注意内存优化。MySQL 默认配置通常占用较多内存,对于 2GB 的机器,如果不调整参数,极易触发 OOM(内存溢出)导致服务崩溃。
以下是基于 Ubuntu/Debian 和 CentOS/RHEL 两种主流系统的详细安装与优化指南。
⚠️ 重要前提:检查系统架构
在安装前,请确认你的服务器是 x86_64 (64位) 还是 arm64 (如部分新款实例)。以下命令默认针对 x86_64,如果是 ARM 架构,包名需相应调整(如 mysql-server 通常会自动适配)。
方案一:Ubuntu / Debian 系统 (推荐)
1. 更新软件源并安装
sudo apt update
sudo apt install mysql-server -y
2. 安全初始化
运行安全脚本,设置 root 密码并移除匿名用户等:
sudo mysql_secure_installation
按提示操作:输入新密码、删除匿名账户、禁止 root 远程登录(除非你需要)、移除测试数据库。
3. 【关键步骤】修改配置文件以适配 2G 内存
MySQL 默认 innodb_buffer_pool_size 可能过大。我们需要手动限制它。
编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 或者在某些版本中是 /etc/my.cnf
找到 [mysqld] 部分,添加或修改以下参数:
[mysqld]
# 基础连接数,根据并发需求调整,2G 内存建议 100-150
max_connections = 150
# InnoDB 缓冲池大小 (核心优化点)
# 物理内存 2GB,建议设置为 512MB 到 768MB (不要超过 50%)
innodb_buffer_pool_size = 512M
# 其他内存相关参数优化
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size = 2M
# 日志设置
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
保存退出 (Ctrl+O, Enter, Ctrl+X)。
4. 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
sudo systemctl status mysql
5. 验证内存占用
free -h
ps aux | grep mysql
确保 mysqld 进程占用内存稳定在 600MB-900MB 之间,没有持续飙升。
方案二:CentOS / Rocky Linux / AlmaLinux
1. 安装 MySQL YUM 仓库
# 下载 RPM 包
wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm
# 如果版本不同,请去官网获取对应 el8/el9 的链接
# 安装仓库
sudo rpm -Uvh mysql80-community-release-el7-9.noarch.rpm
# 安装 MySQL 5.7 (注意指定版本号)
sudo yum install mysql-community-server -y
注:如果上述直接安装的是 MySQL 8.0,可以在 /etc/yum.repos.d/mysql-community.repo 文件中将 enable 改为 0,并将 5.7 的 enable=1,然后重新安装。
2. 修改配置文件
编辑 /etc/my.cnf:
sudo vi /etc/my.cnf
在 [mysqld] 下添加优化参数:
[mysqld]
max_connections = 150
innodb_buffer_pool_size = 512M
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size = 2M
3. 启动服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld
4. 获取初始 root 密码
CentOS 安装后,root 密码会随机生成在日志中:
sudo grep 'temporary password' /var/log/mysqld.log
使用临时密码登录后,必须立即修改密码。
🛡️ 阿里云轻量服务器特别优化建议
除了修改 MySQL 配置,必须配合阿里云的系统级优化,否则依然可能宕机:
1. 增加 Swap (虚拟内存)
这是防止 OOM 杀进程的最后一道防线。
- Ubuntu:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - CentOS:
dd if=/dev/zero of=/swapfile bs=1M count=2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
2. 关闭不必要的服务
轻量服务器资源宝贵,检查是否有 Docker、Nginx 等其他高负载服务同时运行。如果只跑 MySQL,确保防火墙只开放 3306 端口(阿里云控制台的安全组设置),避免扫描攻击消耗 CPU。
3. 监控内存
安装 htop 实时观察:
sudo apt install htop -y # Ubuntu
sudo yum install htop -y # CentOS
htop
观察 Load Average 和 Memory 使用率。如果 buff/cache 过高但可用内存极低,说明 MySQL 吃得太紧,需进一步调小 innodb_buffer_pool_size。
💡 总结
在 2GB 内存的轻量服务器上:
- 必须开启 Swap 分区(至少 2GB)。
- 必须将
innodb_buffer_pool_size限制在 512M 左右。 - 严禁开启大量其他高内存服务。
- 如果业务流量较大,建议考虑升级至 4GB 内存实例,因为 MySQL 5.7 在低配环境下维护成本较高且性能受限。
CLOUD技术博