在 CentOS 或 Ubuntu 云服务器上安装 MySQL 的完整步骤需根据发行版版本和官方推荐方式选择(MySQL 官方推荐使用 Oracle 提供的 APT/YUM 仓库安装最新稳定版,而非系统默认仓库中的旧版 mariadb)。以下是 2024 年推荐的生产级安装方案,兼顾安全性、版本可控性与最佳实践:
✅ 前提条件
- 已登录云服务器(SSH),具备
sudo权限 -
确保系统已更新:
# Ubuntu sudo apt update && sudo apt upgrade -y # CentOS 7/8/9(以 CentOS 9 Stream 为例) sudo dnf update -y # CentOS 8+/9 # 或 CentOS 7: sudo yum update -y - 关闭或配置防火墙(如
ufw/firewalld)——生产环境建议仅开放 3306(或自定义端口)且限制 IP - 确保云服务商安全组(Security Group)已放行 MySQL 端口(默认 3306)
🔧 一、Ubuntu(22.04 / 24.04 LTS)安装 MySQL 8.0/8.4(推荐)
✅ 使用 MySQL 官方 APT 仓库(获取最新稳定版,如 8.4.0+),避免 Ubuntu 默认的
mariadb-server
步骤 1:下载并安装 MySQL APT 配置工具
cd /tmp
# 下载最新 MySQL APT 配置包(以 8.4 为例;请访问 https://dev.mysql.com/downloads/repo/apt/ 获取最新链接)
wget https://dev.mysql.com/get/mysql-apt-config_8.4.0-1ubuntu22.04_all.deb
# 验证签名(可选但强烈推荐)
wget https://dev.mysql.com/downloads/repo/apt/KEYS
gpg --dearmor < KEYS > /usr/share/keyrings/mysql-apt-keyring.gpg
# 安装配置包(安装时会弹出交互界面 → 选择 MySQL Server & Cluster → 按 Tab → Enter 确认)
sudo dpkg -i mysql-apt-config_*.deb
# 若报依赖错误,运行:
sudo apt --fix-broken install -y
步骤 2:更新源并安装 MySQL Server
sudo apt update
sudo apt install mysql-server -y
✅ 安装过程会自动启动服务并生成 root 密码(记录终端输出中的临时密码!形如:A temporary password is generated for root@localhost: xxxxxx)
步骤 3:运行安全初始化(必须!)
sudo mysql_secure_installation
按提示操作(推荐选项):
- Enter current password for root (enter for none): ✅ 粘贴上一步的临时密码
- Switch to unix_socket authentication? ❌
No(保持默认认证方式) - New password for root: ✅ 设置强密码(至少 8 位,含大小写字母+数字+符号)
- Remove anonymous users? ✅
Y - Disallow root login remotely? ✅
Y(生产环境禁止 root 远程登录) - Remove test database? ✅
Y - Reload privilege tables? ✅
Y
步骤 4:验证与基础配置
# 登录验证
sudo mysql -u root -p
# 查看版本
SELECT VERSION();
# 退出
EXIT;
✅ 可选:配置远程访问(谨慎!仅限必要场景)
sudo mysql -u root -p
-- 创建专用管理用户(替换 'myadmin' 和 'StrongPass123!')
CREATE USER 'myadmin'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 修改绑定地址(编辑配置文件)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到 bind-address = 127.0.0.1 → 改为 bind-address = 0.0.0.0
# 或更安全:bind-address = 具体内网IP(如 10.0.0.5)
# 重启服务
sudo systemctl restart mysql
⚠️ 同时务必在云安全组 + 服务器防火墙中仅放行可信 IP 访问 3306 端口!
🔧 二、CentOS / Rocky Linux / AlmaLinux(8.x / 9.x)安装 MySQL 8.0/8.4
✅ 使用 MySQL 官方 YUM 仓库(替代系统默认的 mariadb)
步骤 1:添加 MySQL YUM 仓库
# 下载 MySQL YUM repo(以 CentOS 9 为例;其他版本见官网)
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm -y
# 启用 MySQL 8.4(若需 8.0 则启用 mysql80-community)
sudo dnf config-manager --enable mysql84-community # CentOS 8/9
# CentOS 7 使用:
# sudo yum-config-manager --enable mysql84-community
步骤 2:安装 MySQL Server
# 禁用默认的 mariadb 模块(CentOS 8+/9)
sudo dnf module reset mysql
sudo dnf module enable mysql:84
sudo dnf install mysql-community-server -y
步骤 3:启动并启用开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld # 确认 active (running)
步骤 4:获取临时 root 密码 & 安全初始化
# 查看临时密码(首次启动生成)
sudo grep 'temporary password' /var/log/mysqld.log
# 运行安全脚本
sudo mysql_secure_installation
操作同 Ubuntu 步骤 3(输入临时密码 → 设新密码 → Y/Y/Y/Y)
步骤 5:防火墙放行(如启用 firewalld)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
🛡️ 三、关键安全加固(所有系统必做!)
| 项目 | 命令/操作 |
|---|---|
| 禁用符号链接(防文件读取漏洞) | 编辑 /etc/my.cnf,在 [mysqld] 下添加:symbolic-links=0 |
| 设置严格 SQL 模式 | 在 [mysqld] 下添加:sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
| 限制错误日志权限 | sudo chown mysql:mysql /var/log/mysql/error.log |
| 定期备份 | 使用 mysqldump + cron 或 mysqlpump(8.0+) |
| 启用 SSL(生产必备) | sudo mysql_ssl_rsa_setup --datadir=/var/lib/mysql,然后配置 require_secure_transport=ON |
🚀 四、连接测试(本地 & 远程)
本地连接:
mysql -u myadmin -p -h 127.0.0.1
远程连接(从本地电脑):
mysql -u myadmin -p -h your-server-public-ip
💡 若失败,请检查:
- 云安全组是否放行 3306?
- 服务器防火墙(
ufw/firewalld)是否放行?- MySQL 是否监听
0.0.0.0(非仅127.0.0.1)?- 用户
'myadmin'@'%'是否存在且权限正确?
❗ 常见问题速查
| 现象 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
sudo systemctl status mysqld → sudo systemctl start mysqld |
Access denied for user 'root'@'localhost' |
用临时密码登录,或重置密码(官方重置指南) |
Authentication plugin 'caching_sha2_password' cannot be loaded |
客户端不兼容 → 创建用户时指定插件:CREATE USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; |
| 占用内存过高 | 编辑 /etc/my.cnf 调整 innodb_buffer_pool_size(建议设为物理内存 50~75%) |
| ✅ 总结推荐组合: | 系统 | 推荐方式 | 版本 | 备注 |
|---|---|---|---|---|
| Ubuntu 22.04/24.04 | MySQL 官方 APT 仓库 | 8.4 LTS | 最新特性 + 官方支持 | |
| CentOS 8/9/Rocky 9 | MySQL 官方 YUM 仓库 | 8.4 | 替代 mariadb,功能完整 | |
| CentOS 7(EOL) | MySQL YUM 仓库 | 8.0(最后支持版) | 注意 CentOS 7 已停止维护 |
📌 重要提醒:
- 生产环境禁止使用 root 远程登录,务必创建最小权限专用用户;
- 定期更新 MySQL(
sudo apt upgrade mysql-server/sudo dnf update mysql-community-server);- 敏感数据务必加密(TDE 表空间加密、列加密等);
- 日志审计开启:
log_error = /var/log/mysql/error.log+general_log = OFF(仅调试开)。
需要我为你生成 一键安装脚本、备份脚本、SSL 配置详解 或 Docker 部署方案,欢迎随时提出! 😊
云服务器