在阿里云 Linux 服务器(通常指 ECS 或轻量应用服务器,系统多为 CentOS 7/8, Ubuntu 20.04/22.04, Debian 10/11)上安装 MySQL 并开启远程访问,主要分为 5个关键步骤。
⚠️ 核心注意 :很多人无法远程连接,不是因为没装好,而是因为 防火墙 或 安全组 没放行。请务必按顺序检查。
📋 准备工作
- 登录阿里云控制台,确保你的服务器实例处于 "运行中" 状态。
- 获取服务器的 公网 IP地址。
- 通过 SSH 工具(如 Xshell, PuTTY, Terminal)连接到服务器。
第一步:安装 MySQL Server
不同 Linux 发行版的命令略有不同,请根据你的系统选择:
✅ 场景 A:Ubuntu / Debian
# 更新源
sudo apt update
# 安装 MySQL Server (交互式设置root密码)
sudo apt install mysql-server -y
# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
✅ 场景 B:CentOS 7 / 8 / Rocky Linux (使用 MariaDB 或 MySQL 8.0)
注:CentOS 默认仓库通常是 MariaDB,若必须用 Oracle MySQL 需添加官方源。以下以通用 MySQL 8.0 为例(需先配置 yum 源):
# 1. 安装 MySQL Yum Repository (以 CentOS 8 为例)
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
# 2. 安装 MySQL Server
sudo dnf install mysql-server -y
# 3. 启动服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
第二步:初始化安全设置 & 设置 Root 密码
安装完成后,MySQL 默认可能没有密码或密码已生成。
对于 Ubuntu/Debian:
# 进入 MySQL 命令行
sudo mysql
# 在 MySQL 提示符下执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码';
FLUSH PRIVILEGES;
exit;
对于 CentOS/RHEL (MySQL 8.0):
# 1. 查找临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 2. 运行安全脚本
sudo mysql_secure_installation
# 按照提示操作:
# - 输入刚才找到的临时密码
# - 修改 root 密码 (务必设置复杂密码)
# - 移除匿名用户? Y
# - 禁止 root 远程登录? N (因为我们要开启远程!)
# - 移除 test 数据库? Y
# - 重新加载权限表? Y
第三步:创建允许远程访问的用户 (最关键步骤)
MySQL 默认只允许 localhost 本地连接。我们需要创建一个新用户或修改 root 用户以允许任意 IP (%) 访问。
-
登录 MySQL:
sudo mysql -u root -p -
执行 SQL 语句:
方案一:修改 root 用户允许所有 IP 访问 (简单但不推荐生产环境)
-- MySQL 8.0+ 语法 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; UPDATE user SET Host='%' WHERE User='root'; FLUSH PRIVILEGES; -- 如果上面报错,尝试直接创建新用户 CREATE USER 'admin'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;方案二:创建专用远程用户 (推荐)
-- 创建用户 'myuser',密码 'mypassword',允许从任何主机连接 CREATE USER 'myuser'@'%' IDENTIFIED BY 'MyStrongPassword123!'; -- 授予所有权限 (或者指定特定数据库) GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'; -- 刷新权限 FLUSH PRIVILEGES; -- 退出 exit;
第四步:配置 MySQL 监听外部接口
默认情况下,MySQL 可能只监听 127.0.0.1。需要修改配置文件使其监听 0.0.0.0。
-
编辑配置文件:
# Ubuntu/Debian sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # CentOS sudo nano /etc/my.cnf # 或者 sudo nano /etc/mysql/my.cnf -
找到
bind-address行:[mysqld] # bind-address = 127.0.0.1 <-- 注释掉这一行 bind-address = 0.0.0.0 <-- 或者改成这一行 -
保存并重启 MySQL 服务:
sudo systemctl restart mysql # Ubuntu sudo systemctl restart mysqld # CentOS -
验证监听状态:
netstat -tlnp | grep 3306 # 应该看到 0.0.0.0:3306 而不是 127.0.0.1:3306
第五步:放行防火墙与安全组 (90% 的人卡在这里!)
你需要打通 两道门:Linux 内部防火墙 + 阿里云控制台安全组。
1. 放行 Linux 内部防火墙
如果是 Ubuntu/Debian (UFW):
sudo ufw allow 3306/tcp
sudo ufw reload
如果是 CentOS/RHEL (Firewalld):
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 放行阿里云"安全组" (必须做!)
这是阿里云特有的网络隔离机制,即使 Linux 防火墙开了,云厂商层面也会拦截。
- 登录 阿里云控制台。
- 进入 ECS 实例列表 -> 点击你的实例 ID。
- 点击下方的 "安全组" 标签页 -> 点击安全组 ID 进入详情。
- 点击 "手动添加" 规则。
- 填写如下信息:
- 方向:入方向
- 优先级:1
- 协议类型:自定义 TCP
- 端口范围 :
3306/3306 - 授权对象 :
0.0.0.0/0(表示允许所有 IP,生产环境建议改为你的固定 IPxxx.xxx.xxx.xxx/32) - 描述:MySQL Remote Access
- 点击 确定。
🧪 第六步:测试远程连接
在你的 本地电脑 (Windows/Mac) 上安装一个 MySQL 客户端(如 Navicat, DBeaver, 或命令行 mysql)。
尝试连接:
- Host/IP: 你的阿里云公网 IP
- Port: 3306
- User : 你创建的远程用户 (如
myuser或root) - Password: 你设置的密码
✅ 成功标志:显示 "Connection Successful"。
❌ 失败排查清单:
- 密码是否正确?(注意大小写)
- 用户是否创建了
'user'@'%'?(不能是'user'@'localhost') - 阿里云安全组是否添加了 3306 端口?
- Linux 防火墙是否放行了 3306?
bind-address是否改成了0.0.0.0?- 是否重启了 MySQL 服务?
🔒 安全建议 (生产环境必看)
- 不要暴露 root 用户:永远不要用 root 账号远程连接,创建一个权限受限的普通用户。
- 限制来源 IP :在阿里云安全组中,将
0.0.0.0/0改为你的家庭/公司固定 IP,防止被暴力破解。 - 修改默认端口:可以将 3306 改为其他端口(如 33060),减少自动化扫描攻击。
- 启用 SSL:如果通过互联网传输数据,建议在 MySQL 配置中启用 SSL 加密连接。