在阿里云服务器(ECS)上安装和配置 MySQL 数据库,需根据您选择的操作系统(推荐 CentOS 7/8、Alibaba Cloud Linux 2/3 或 Ubuntu 20.04/22.04)进行操作。以下以 Alibaba Cloud Linux 3(基于 RHEL 9) 和 Ubuntu 22.04 为例,提供安全、规范、生产可用的完整流程(含防火墙、权限、远程访问、基础安全加固):
✅ 一、前期准备
- 确认 ECS 实例状态
- 已成功创建并启动实例,能通过 SSH 连接(如
ssh root@<公网IP>)。
- 已成功创建并启动实例,能通过 SSH 连接(如
- 设置安全组规则(关键!)
- 登录 阿里云控制台 → ECS → 安全组
- 添加入方向规则:
- 协议类型:
MySQL(3306)或 自定义 TCP 端口3306 - 授权对象:
- ✅ 仅允许您的办公 IP(如
203.208.60.1/32)——强烈推荐 - ❌ 避免
0.0.0.0/0(开放全网),存在高风险!
- ✅ 仅允许您的办公 IP(如
- 协议类型:
✅ 二、安装 MySQL(推荐官方 APT/YUM 源,非系统默认旧版)
▶ 方案1:Ubuntu 22.04(推荐 MySQL 8.0+)
# 1. 更新系统 & 安装依赖
sudo apt update && sudo apt upgrade -y
# 2. 下载并安装 MySQL APT 仓库配置(获取最新稳定版)
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 Server & Cluster" → 回车 → 选择 "mysql-8.0" → OK
sudo apt update
# 3. 安装 MySQL Server(自动安装服务并初始化)
sudo apt install -y mysql-server
# 4. 启动并设为开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 5. 查看初始密码(MySQL 8.0+ 初始化后生成临时密码)
sudo grep 'temporary password' /var/log/mysql/error.log
# 示例输出:A temporary password is generated for root@localhost: xxxxxxxx
▶ 方案2:Alibaba Cloud Linux 3 / CentOS Stream 9(推荐 MySQL 8.0)
# 1. 启用 MySQL 官方仓库(替代系统默认 mariadb)
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
# 2. 安装 MySQL Server
sudo dnf install -y mysql-community-server
# 3. 启动并开机自启
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 4. 获取临时 root 密码
sudo grep 'temporary password' /var/log/mysqld.log
💡 提示:避免使用
mariadb-server(阿里云/Ubuntu 默认包),它与 MySQL 协议兼容但功能、配置、安全策略有差异;生产环境建议用 Oracle 官方 MySQL。
✅ 三、首次安全配置(必须执行!)
sudo mysql_secure_installation
按提示操作(关键步骤):
- Enter password for user root: 输入上一步查到的临时密码
- New password for root: 🔑 设置强密码(至少8位,含大小写字母+数字+符号)
- Remove anonymous users? →
Y - Disallow root login remotely? →
N(若需远程管理,稍后单独授权;否则选Y) - Remove test database and access to it? →
Y - Reload privilege tables now? →
Y
✅ 完成后 root 只能本地登录(127.0.0.1 或 localhost)。
✅ 四、配置远程访问(如需从本地电脑连接)
⚠️ 仅在已配置安全组白名单的前提下操作!
# 1. 登录 MySQL(用新密码)
sudo mysql -u root -p
# 2. 创建专用管理用户(不直接用 root 远程!)
mysql> CREATE USER 'admin'@'%' IDENTIFIED BY 'YourStrongPass123!';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
# 3. (可选)限制仅允许特定 IP 访问(更安全)
# mysql> CREATE USER 'appuser'@'192.168.1.100' IDENTIFIED BY 'AppPass456!';
# mysql> GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'appuser'@'192.168.1.100';
# mysql> FLUSH PRIVILEGES;
# 4. 退出
mysql> EXIT;
▶ 修改 MySQL 绑定地址(允许外部连接)
# 编辑配置文件
sudo nano /etc/my.cnf.d/mysql-server.cnf # ALinux/CentOS
# 或
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
# 找到 [mysqld] 段,修改或添加:
bind-address = 0.0.0.0 # 允许所有 IP(确保安全组已限制!)
# 或更安全:bind-address = 172.16.0.10 # ECS 内网 IP(配合跳板机)
# 保存后重启
sudo systemctl restart mysqld
✅ 五、验证连接
- 本地测试:
mysql -u admin -p -h 127.0.0.1 - 远程测试(从本地电脑):
使用 MySQL 客户端(如 MySQL Workbench、DBeaver、Navicat)连接:- Host:
<你的ECS公网IP> - Port:
3306 - User:
admin - Password:
YourStrongPass123!
- Host:
✅ 六、生产环境加固建议(必做!)
| 项目 | 操作 |
|---|---|
| 🔐 禁用 root 远程登录 | DROP USER 'root'@'%';(保留 'root'@'localhost') |
| 📦 创建应用专用账号 | 仅授予所需数据库的最小权限(如 GRANT SELECT,INSERT ON appdb.* TO 'app'@'%') |
| 🛡️ 启用防火墙(可选) | sudo ufw allow from <你的IP> to any port 3306(Ubuntu)或 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="YOUR_IP" port port="3306" protocol="tcp"' |
| 📜 开启错误日志 & 慢查询日志 | 在 /etc/my.cnf 中添加:log-error=/var/log/mysql/error.logslow_query_log=ONlong_query_time=2 |
| 🔄 定期备份 | 使用 mysqldump + cron 定时备份到 OSS 或本地磁盘 |
❌ 常见问题速查
| 现象 | 解决方案 |
|---|---|
Can't connect to local MySQL server |
检查 systemctl status mysqld 是否运行;检查 bind-address 和 skip-networking |
| 远程连接被拒 | ① 安全组是否放行 3306?② bind-address 是否为 0.0.0.0?③ 用户 host 是否为 % 或指定 IP?④ iptables/firewalld 是否拦截? |
| MySQL 8.0 密码认证失败 | 默认使用 caching_sha2_password 插件,客户端不支持时改用:ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx'; |
✅ 最后:一键脚本(可选,仅用于测试环境)
# ⚠️ 仅限学习/测试!生产环境请手动执行每步
curl -fsSL https://raw.githubusercontent.com/aliyun/aliyun-openapi-python-sdk/master/tools/install-mysql.sh | sudo bash
注:阿里云官方未提供此脚本,此处仅为示意;生产环境务必人工审核配置。
如需进一步帮助,可提供:
- 您的 ECS 操作系统版本(
cat /etc/os-release) - MySQL 版本需求(如必须 MySQL 5.7 兼容旧系统?)
- 是否需要主从复制、读写分离等高可用方案?
我可为您定制详细部署文档 👇
祝您数据库稳定高效!🚀
CLOUD技术笔记