在阿里云轻量应用服务器(Simple Application Server)上部署 MySQL,核心难点不在于安装命令本身,而在于网络配置和防火墙策略。很多新手装完数据库发现本地连不上,90% 是因为没放行 3306 端口。
下面按生产环境可用的标准流程梳理一遍,涵盖从系统准备到远程连接验证的全过程。假设你使用的是 Ubuntu 20.04/22.04 LTS 版本(目前主流),通过 SSH 登录服务器后执行以下操作。
1. 系统更新与基础依赖
先确保系统包是最新的,避免安装过程中出现依赖冲突。
sudo apt update && sudo apt upgrade -y
2. 安装 MySQL
Ubuntu 官方源里的 MySQL 版本通常比较稳定。推荐使用 mysql-server 包。
sudo apt install mysql-server -y
安装完成后,MySQL 服务通常会自动启动。你可以检查状态:
systemctl status mysql
如果显示 active (running),说明服务正常。如果没有自动启动,手动启动并设置开机自启:
sudo systemctl start mysql
sudo systemctl enable mysql
3. 安全加固(关键步骤)
刚装好的 MySQL 默认只允许本地 root 用户登录,且密码强度策略可能未启用。建议运行安全脚本进行初始化配置。
sudo mysql_secure_installation
执行过程中会提示你配置几个选项,建议如下:
- Validate Password Component: 选择
Y,启用密码强度校验(强烈建议开启,防止弱口令)。 - Change the root password?: 如果你之前没设过或想重置,选
Y,然后设置一个强密码。 - Remove anonymous users?: 选
Y。 - Disallow root login remotely?: 注意! 这里默认是禁止远程 root 登录。但我们需要远程访问,所以稍后我们会创建一个新的管理员账号来远程登录,而不是直接开 root 的远程权限(出于安全考虑,不建议直接开放 root 远程)。
- Remove test database?: 选
Y。 - Reload privilege tables now?: 选
Y。
4. 创建远程访问用户
为了安全,不要直接用 root 远程连接。创建一个专用的管理用户,并授权其远程访问权限。
进入 MySQL 命令行:
sudo mysql
执行以下 SQL 语句(请替换为你的用户名和密码):
-- 创建新用户 'myuser',允许从任意主机 '%' 连接
CREATE USER 'myuser'@'%' IDENTIFIED BY 'YourStrongPassword123!';
-- 授予所有数据库的完全权限(生产环境建议最小权限原则,比如只给特定库)
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
注意:如果你的 MySQL 版本较新(8.0+),认证插件可能是
caching_sha2_password。部分旧版客户端工具(如 Navicat 旧版本、某些 Python 库)可能不支持。如果遇到连接错误,可以将认证方式改回传统的mysql_native_password:ALTER USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPassword123!'; FLUSH PRIVILEGES;
5. 修改 MySQL 监听地址
默认情况下,MySQL 只监听 127.0.0.1(localhost)。要允许外部连接,必须修改绑定地址。
编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address 这一行,将其修改为:
bind-address = 0.0.0.0
保存并退出(Nano 编辑器按 Ctrl+O, Enter, Ctrl+X)。
重启 MySQL 服务使配置生效:
sudo systemctl restart mysql
6. 阿里云轻量服务器防火墙设置(最容易踩坑的一步)
即使 MySQL 监听了 0.0.0.0,如果云厂商的防火墙没开,外部依然无法访问。轻量应用服务器有独立的防火墙控制台,不是 iptables。
- 登录阿里云控制台,进入【轻量应用服务器】实例详情。
- 找到左侧菜单的 【防火墙】 或 【安全组】 标签页。
- 点击 【添加规则】。
- 填写规则:
- 方向:入方向
- 协议:TCP
- 端口范围:3306
- 授权对象:
0.0.0.0/0(表示允许所有 IP,生产环境建议改为你的固定公网 IP,如123.45.67.89/32) - 优先级:1
- 保存规则。
7. 验证连接
现在从你的本地电脑尝试连接。
使用命令行测试:
mysql -h <你的服务器公网IP> -P 3306 -u myuser -p
或者使用图形化工具(如 DBeaver, Navicat, HeidiSQL):
- Host: 服务器公网 IP
- Port: 3306
- User: myuser
- Password: 你设置的密码
如果能成功进入 MySQL 命令行或看到数据库列表,说明部署完成。
常见问题排查
-
Connection refused (111):
- 检查 MySQL 是否正在运行 (
systemctl status mysql)。 - 检查
/etc/mysql/mysql.conf.d/mysqld.cnf中bind-address是否为0.0.0.0。 - 确认阿里云防火墙已放行 3306 端口。
- 检查 MySQL 是否正在运行 (
-
Authentication plugin ‘caching_sha2_password’:
- 这是 MySQL 8.0 的新特性。解决方法是在上面第 5 步中,将用户的认证插件改为
mysql_native_password。
- 这是 MySQL 8.0 的新特性。解决方法是在上面第 5 步中,将用户的认证插件改为
-
权限不足 (Access denied for user ‘root’@’…’):
- 确保你没有试图用 root 远程登录,而是使用了新建的
myuser。 - 确保执行了
FLUSH PRIVILEGES;。
- 确保你没有试图用 root 远程登录,而是使用了新建的
-
性能瓶颈:
- 轻量服务器的 CPU 和内存有限。如果是高并发场景,建议调整 MySQL 的
innodb_buffer_pool_size等参数,或者直接使用阿里云 RDS 托管服务,让专业团队帮你做备份、监控和高可用。
- 轻量服务器的 CPU 和内存有限。如果是高并发场景,建议调整 MySQL 的
这套流程覆盖了从安装到网络可达的核心环节,适合个人开发者和小微企业项目使用。
云技术博客