在 CentOS 或 Ubuntu 云服务器上安装 MySQL 的完整步骤需区分发行版和版本(推荐使用官方 MySQL APT/YUM 仓库以获取最新稳定版,而非系统默认的 MariaDB/旧版 MySQL)。以下是生产环境推荐的标准化流程,涵盖安全加固、基础配置和验证:
✅ 前提说明
- 不推荐使用
apt install mysql-server(Ubuntu)或yum install mysql-server(CentOS):- Ubuntu 默认安装的是 MariaDB(MySQL 的兼容分支),非 Oracle 官方 MySQL;
- CentOS 8+ 已移除 MySQL 包,仅提供 MariaDB;CentOS 7 默认为较旧的 MySQL 5.1/5.5。
- ✅ 正确做法:使用 Oracle 官方 MySQL APT/YUM 仓库安装 MySQL 8.0+(当前 LTS 版本)。
🌐 一、通用准备(所有系统)
# 1. 更新系统
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian
sudo yum update -y # CentOS 7
sudo dnf update -y # CentOS 8+/AlmaLinux/Rocky
# 2. 关闭防火墙(或放行端口)——生产环境建议配置规则而非关闭
sudo ufw disable # Ubuntu(如启用)
sudo systemctl stop firewalld # CentOS(临时)
# 生产建议放行 3306 端口:
sudo ufw allow 3306 # Ubuntu
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload # CentOS
# 3. 检查是否已安装 MariaDB(避免冲突)
mysql --version
rpm -qa | grep mariadb # CentOS
dpkg -l | grep mysql # Ubuntu
# 若已安装 MariaDB,建议卸载(尤其当端口被占用时):
# sudo apt remove --purge mariadb-server # Ubuntu
# sudo yum remove mariadb-server # CentOS 7
# sudo dnf remove mariadb-server # CentOS 8+
🐧 二、Ubuntu(20.04 / 22.04 / 24.04)安装 MySQL 8.0+
✅ 使用 MySQL APT Repository
# 1. 下载并安装 MySQL APT 配置包(选择对应 Ubuntu 版本)
cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
# ⚠️ 安装时会弹出交互界面 → 用方向键选中 "mysql-8.0" → Tab 切换到 OK → 回车
# 2. 更新源并安装
sudo apt update
sudo apt install mysql-server -y
# 3. 启动并设为开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
# 4. 运行安全初始化(关键!设置 root 密码、禁用匿名用户等)
sudo mysql_secure_installation
# 按提示操作:
# - Set password for root? → Y → 输入强密码(记录!)
# - Remove anonymous users? → Y
# - Disallow root login remotely? → Y(生产必须!)
# - Remove test database? → Y
# - Reload privilege tables? → Y
🐘 三、CentOS/RHEL/AlmaLinux/Rocky(7/8/9)安装 MySQL 8.0+
✅ 使用 MySQL YUM Repository
# 1. 下载并安装 MySQL YUM 仓库(自动配置源)
cd /tmp
# CentOS 7 / RHEL 7:
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el7-11.noarch.rpm
# CentOS 8+/RHEL 8+/AlmaLinux/Rocky(使用 dnf):
wget https://dev.mysql.com/get/mysql80-community-release-el8-11.noarch.rpm
sudo rpm -Uvh mysql80-community-release-el8-11.noarch.rpm
# 2. 安装 MySQL 服务
sudo yum install mysql-community-server -y # CentOS 7
sudo dnf install mysql-community-server -y # CentOS 8+/RHEL 8+
# 3. 启动并设为开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 4. 获取初始 root 密码(首次启动后生成)
sudo grep 'temporary password' /var/log/mysqld.log
# 示例输出:A temporary password is generated for root@localhost: aB3#xY9!pQ2@
# 5. 运行安全脚本(使用初始密码登录后执行)
sudo mysql -u root -p
# 输入上面查到的临时密码 → 进入 MySQL 后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!';
FLUSH PRIVILEGES;
EXIT;
# 再运行安全加固(推荐):
sudo mysql_secure_installation
# 提示输入新 root 密码,其余同 Ubuntu 步骤(全部选 Y)
🔐 四、关键安全与配置加固(必做!)
# 1. 编辑 MySQL 配置文件(增强安全性)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
sudo nano /etc/my.cnf # CentOS/RHEL
# 在 [mysqld] 段添加/修改以下内容:
[mysqld]
bind-address = 127.0.0.1 # ❗仅监听本地(禁止公网暴露!云服务器必须!)
max_connections = 200
innodb_buffer_pool_size = 512M # 根据内存调整(建议 50%-70% 总内存)
skip_symbolic_links = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 2. 重启生效
sudo systemctl restart mysql # Ubuntu
sudo systemctl restart mysqld # CentOS
# 3. 创建专用应用用户(禁止 root 远程连接!)
mysql -u root -p
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPass456!';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
✅ 五、验证安装
# 1. 检查服务状态
sudo systemctl status mysql # Ubuntu
sudo systemctl status mysqld # CentOS
# 2. 登录测试(使用刚创建的用户)
mysql -u myapp_user -p -D myapp_db
# 3. 查看版本与编码
mysql -V
mysql -u root -p -e "SELECT VERSION(), @@character_set_database, @@collation_database;"
# 4. 检查监听地址(应为 127.0.0.1:3306,非 0.0.0.0)
sudo ss -tlnp | grep :3306
⚠️ 重要注意事项
| 项目 | 说明 |
|---|---|
| ❌ 不要开放 3306 到公网 | 云服务器务必 bind-address = 127.0.0.1,通过 SSH 隧道或内网 VPC 访问 |
| ✅ 强密码策略 | MySQL 8.0 默认启用 validate_password 插件,密码需含大小写字母+数字+特殊字符 |
| 🔐 备份方案 | 安装后立即配置 mysqldump 定时备份或使用 Percona XtraBackup |
| 📦 升级说明 | 后续升级请使用相同仓库源,避免跨大版本直接升级(如 5.7→8.0 需迁移) |
| 📜 日志管理 | 默认日志在 /var/log/mysql/(Ubuntu)或 /var/log/mysqld.log(CentOS),建议配置 logrotate |
💡 补充:快速一键脚本(Ubuntu 示例)
# 可保存为 install-mysql.sh 并执行(需 root)
#!/bin/bash
apt update && apt install wget gnupg -y
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
echo "mysql-apt-config mysql-apt-config/select-server select mysql-8.0" | debconf-set-selections
dpkg -i mysql-apt-config_0.8.24-1_all.deb
apt update && apt install mysql-server -y
mysql_secure_installation <<EOF
y
MyRootPass123!
y
y
y
y
EOF
sed -i '/^bind-address/cbind-address = 127.0.0.1' /etc/mysql/mysql.conf.d/mysqld.cnf
systemctl restart mysql
echo "✅ MySQL 8.0 installed securely!"
如需进一步支持(如主从复制、读写分离、备份脚本、Docker 部署、或与 Nginx/PHP 集成),欢迎继续提问! 🚀
轻量云Cloud