使用 Xshell 连接阿里云 MySQL 数据库,实际上是通过 SSH 隧道(端口转发) 将本地 Xshell 的某个端口映射到阿里云 ECS 实例上的 MySQL 端口,再通过本地客户端(如 Navicat、DBeaver 或命令行)连接。Xshell 本身不直接连接 MySQL,而是建立安全的 SSH 通道。
以下是详细步骤:
✅ 前提条件
- 阿里云 ECS 已安装并运行 MySQL(建议版本 5.7/8.0+)。
- MySQL 允许远程访问:
- 修改
my.cnf(通常位于/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf):[mysqld] bind-address = 0.0.0.0 # 监听所有 IP(生产环境慎用,可限制为特定安全组 IP) - 重启 MySQL:
sudo systemctl restart mysqld
- 修改
- 创建允许远程登录的用户(以 root 为例,推荐用专用用户):
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; - 阿里云安全组规则放行:
- 登录阿里云控制台 → 云服务器 ECS → 实例详情 → 安全组 → 配置规则
- 添加入方向规则:协议 TCP,端口
3306,授权对象设为你的公网 IP或0.0.0.0/0(测试可用,生产建议限 IP)。
⚠️ 注意:若仅通过 SSH 隧道访问,无需开放 3306 到公网!只需在安全组中放行 22(SSH) 和 你自定义的隧道端口(如 3307)。
🔧 步骤一:在 Xshell 中建立 SSH 会话(连接到 ECS)
- 打开 Xshell → 新建会话
- 主机填:ECS 的公网 IP
- 用户名:
root(或其他有 sudo 权限的用户) - 认证方式:密码 或 密钥(推荐密钥)
- 保存并连接成功
🔧 步骤二:配置本地端口转发(Port Forwarding)
在已连接的 Xshell 会话中:
- 右键会话名称 → 属性(Properties)
- 左侧选择 SSH → 隧道(Tunneling)
- 点击 添加(Add):
- 类型:Local Port Forwarding
- 源地址:
localhost(或127.0.0.1) - 源端口:
3307(自定义,避免冲突) - 目标地址:
127.0.0.1(ECS 内网的 localhost) - 目标端口:
3306(ECS 上 MySQL 的实际端口)
- 勾选 启用(Enable)
- 确定保存
✅ 此时:本地
localhost:3307→ SSH 隧道 → ECS127.0.0.1:3306
🔧 步骤三:用本地 MySQL 客户端连接
现在你可以用任意 MySQL 客户端连接:
方法 A:命令行(Linux/macOS/Windows PowerShell)
mysql -h 127.0.0.1 -P 3307 -u remote_user -p
# 输入密码后进入 MySQL
方法 B:Navicat / DBeaver / MySQL Workbench
- 主机:
127.0.0.1 - 端口:
3307(你设置的本地转发端口) - 用户名:
remote_user - 密码:
StrongPassword123! - 协议:MySQL
✅ 连接成功!
🔐 安全建议
- ❌ 不要长期开放 3306 到公网(
0.0.0.0/0) - ✅ 优先使用 SSH 密钥 + 端口转发
- ✅ 限制 MySQL 用户权限(最小权限原则)
- ✅ 定期更新密码,监控异常登录
需要我提供:
- 一键脚本生成 Xshell 隧道配置?
- Docker 部署 MySQL + 自动转发示例?
- 如何验证隧道是否生效?
欢迎告诉我你的具体场景,我可以进一步定制方案 😊
云小栈