走啊走
奋斗

阿里云轻量云服务器2G内存,如何安装MySQL5.7?

服务器价格表

在阿里云轻量应用服务器(2GB 内存)上安装 MySQL 5.7 需要特别注意内存优化。MySQL 默认配置通常占用较大内存,而 2GB 的总内存中,操作系统和 Web 服务(如 Nginx/PHP)也需要占用一部分。如果直接安装默认配置,极易触发 OOM Killer 导致数据库崩溃或服务器卡死。

以下是针对 2GB 内存环境的详细安装与优化指南:

前置准备

  1. 登录服务器:通过 SSH 连接你的阿里云轻量服务器。
  2. 系统更新:确保软件源是最新的。
    # CentOS/Rocky/AlmaLinux
    sudo yum update -y
    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y
  3. 检查内存:确认剩余可用内存(free -h),建议至少预留 400MB-500MB 给操作系统和其他服务。

方法一:使用官方 YUM/APT 源安装(推荐,便于后续维护)

1. 添加 MySQL APT/YUM 仓库

如果是 Ubuntu/Debian:

# 下载 MySQL 8.0 APT 仓库(注意:MySQL 官方已停止提供 5.7 的通用 APT 包,但可以通过指定版本安装,或者直接使用 Docker。若必须用 5.7,建议使用 Docker 或源码编译,但考虑到易用性,这里先尝试通过配置指定版本,若失败请转方法二)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
# 在弹出的界面中选择 "MySQL Server & Cluster" -> "MySQL 5.7" -> OK
sudo apt update

如果是 CentOS/Rocky Linux:

# 下载 RPM 包
wget https://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el7-10.noarch.rpm
# 编辑配置文件,启用 5.7 并禁用 8.0
sudo vi /etc/yum.repos.d/mysql-community.repo
# 将 [mysql57] 下的 enabled=0 改为 enabled=1
# 将 [mysql80] 下的 enabled=1 改为 enabled=0
sudo yum makecache fast

2. 安装 MySQL 5.7

# Ubuntu/Debian
sudo apt install mysql-server-5.7

# CentOS/Rocky
sudo yum install mysql-community-server

3. 启动服务

sudo systemctl start mysqld
sudo systemctl enable mysqld

方法二:使用 Docker 安装(最稳妥,隔离性好)

由于 MySQL 5.7 官方对新版操作系统的原生支持逐渐减少,且 2GB 内存下容器化能更好地控制资源,强烈推荐使用 Docker

  1. 安装 Docker(如果未安装):

    # Ubuntu/Debian
    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker $USER
    
    # CentOS
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl start docker
    sudo systemctl enable docker
  2. 拉取并运行 MySQL 5.7
    这是最关键的一步,通过 --memory 参数强制限制内存,防止撑爆服务器。

    docker run -d 
      --name mysql57 
      --restart always 
      --memory="1g" 
      --memory-swap="1.5g" 
      -e MYSQL_ROOT_PASSWORD=your_strong_password 
      -p 3306:3306 
      mysql:5.7
    • --memory="1g":限制 MySQL 最大使用 1GB 内存,留出 1GB 给系统和应用。
    • -p 3306:3306:映射端口,方便外部连接。

关键步骤:内存优化配置(必做)

无论使用哪种方法,都必须修改 my.cnf 配置文件以适配 2GB 内存环境。

  1. 找到配置文件

    • 通常位于 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
    • 如果是 Docker,需挂载自定义配置文件或使用环境变量。
  2. 修改配置项
    [mysqld] 部分添加或修改以下参数:

    [mysqld]
    # 基础设置
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    
    # --- 内存优化核心参数 (针对 2GB 内存) ---
    
    # 最大连接数:2GB 内存不需要太高,默认 151 足够,可设为 100
    max_connections = 100
    
    # 关键:InnoDB Buffer Pool Size
    # 设置为物理内存的 50%-60% 左右。2GB 机器建议设为 512M 或 768M
    # 不要超过 1.2G,否则系统会卡死
    innodb_buffer_pool_size = 512M
    
    # 临时表内存限制
    tmp_table_size = 64M
    max_heap_table_size = 64M
    
    # 查询缓存 (MySQL 5.7 仍支持,但在高并发下可能成为瓶颈,视情况开启)
    # 对于小内存机器,建议关闭或设小一点,避免碎片
    query_cache_type = 0 
    # query_cache_limit = 2M
    # query_cache_size = 32M
    
    # 日志大小 (减小以减少磁盘 IO 和内存占用)
    log_error = /var/log/mysql/error.log
    slow_query_log = 1
    long_query_time = 2
  3. 重启服务生效

    sudo systemctl restart mysqld
    # 如果是 Docker
    docker restart mysql57

验证与安全加固

  1. 验证安装

    mysql -u root -p
    # 输入密码后执行
    status;
    show variables like '%buffer_pool_size%';
  2. 初始化密码(如果是原生安装)
    首次安装后,MySQL 会在错误日志中生成一个临时密码。

    # 查看临时密码
    sudo grep 'temporary password' /var/log/mysqld.log
    # 登录后立即修改
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword';
  3. 防火墙设置(阿里云控制台 + 本地)

    • 阿里云控制台:在“安全组”规则中,放行 TCP 3306 端口(建议仅对特定 IP 开放,不要对所有 IP 开放)。
    • 本地防火墙

      # CentOS
      firewall-cmd --zone=public --add-port=3306/tcp --permanent
      firewall-cmd --reload
      
      # Ubuntu
      ufw allow 3306/tcp

总结建议

对于 2GB 内存 的轻量服务器:

  1. 首选方案:使用 Docker 部署 MySQL 5.7,并通过 --memory 参数严格限制为 1GB,这样最安全且易于管理。
  2. 次选方案:原生安装,但必须手动将 innodb_buffer_pool_size 调整为 512M,并将 max_connections 限制在 100 以内。
  3. 监控:安装后密切观察 top 命令中的内存使用情况,如果 Swap 频繁交换,说明内存依然紧张,需进一步降低上述参数或考虑升级实例规格。