如何在腾讯云Ubuntu服务器上配置MySQL远程访问?

在腾讯云 Ubuntu 服务器上配置 MySQL 远程访问,需要完成以下关键步骤:修改 MySQL 用户权限配置防火墙规则(包括安全组)、确保网络可达性。以下是详细操作指南:


✅ 前提条件

  • 已安装 MySQL(或 MariaDB)服务
  • 拥有 root 或具有 sudo 权限的账号
  • 知道要允许访问的客户端 IP(建议限制为具体 IP,避免全开放)

🔧 步骤一:登录并进入 MySQL

sudo mysql -u root -p

若未设置密码,可直接 sudo mysql;若使用 Debian/Ubuntu 默认 auth_socket 插件,可先跳过密码或使用 sudo mysql


📌 步骤二:创建/修改允许远程访问的用户

方案 A:修改现有 root 用户(不推荐生产环境)

-- 查看当前 host 限制
SELECT user, host FROM mysql.user;

-- 将 root 用户的 host 改为 '%'(允许任意 IP),或指定具体 IP
UPDATE mysql.user SET host = '%' WHERE user = 'root';
FLUSH PRIVILEGES;

⚠️ 注意:直接开放 root@'%' 存在严重安全风险。强烈建议新建专用远程用户

✅ 推荐方案:创建专用远程用户

-- 创建新用户(替换 your_password 和 client_ip)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!';

-- 授予必要权限(根据需求调整,例如只给特定数据库)
GRANT ALL PRIVILEGES ON mydb.* TO 'remote_user'@'%';
-- 或全部库(谨慎使用)
-- GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';

FLUSH PRIVILEGES;

🔐 替代 % 为具体 IP 更安全,例如 'client.example.com''192.168.1.100'
多个 IP 可用逗号分隔(MySQL 8+ 支持 IN ('ip1','ip2') 需用子查询或多次授权)


🛡️ 步骤三:配置 MySQL 绑定地址(bind-address)

编辑 MySQL 配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 或 Debian/Ubuntu 新版路径:/etc/mysql/mysql.conf.d/mysqld.cnf

找到并修改(或添加):

[mysqld]
# 注释掉 bind-address = 127.0.0.1
# bind-address = 127.0.0.1
bind-address = 0.0.0.0   # 监听所有网卡(生产环境建议结合防火墙控制)

✅ 保存后重启 MySQL:

sudo systemctl restart mysql

💡 若需仅监听内网 IP(如云私网),可改为服务器内网 IP(如 172.16.0.5),而非 0.0.0.0


🔥 步骤四:配置腾讯云安全组(关键!)

  1. 登录 腾讯云控制台
  2. 进入 云服务器 CVM → 选择实例 → 安全组
  3. 找到该实例绑定的安全组,点击 编辑规则
  4. 添加入站规则:
    • 类型:MySQL (3306)
    • 来源:填写客户端公网 IP(或 CIDR,如 192.168.1.0/24
    • 协议:TCP
    • 端口范围:3306
    • 策略:允许

⚠️ 切勿将来源设为 0.0.0.0/0(全网开放),除非用于测试且配合强密码 + 时间窗口。


🧪 步骤五:验证远程连接

从客户端机器执行:

mysql -h <服务器公网IP> -P 3306 -u remote_user -p

输入密码后应能成功登录。

若失败,检查:

  • 安全组是否放行
  • bind-address 是否正确
  • 防火墙(ufwiptables)是否拦截:
    sudo ufw status
    sudo ufw allow 3306/tcp from <客户端IP> to any port 3306

🔒 安全最佳实践建议

措施 说明
✅ 禁止 root 远程登录 使用普通用户 + 最小权限原则
✅ 限制来源 IP 用具体 IP/CIDR 替代 %
✅ 启用 SSL/TLS 防止中间人攻击(参考 MySQL SSL 配置)
✅ 定期更新密码与审计日志 log_connections=ON 记录登录行为
✅ 使用跳板机/SSH 隧道 更安全的替代方案:
ssh -L 3306:localhost:3306 user@your-server-ip
然后本地连 mysql -h 127.0.0.1 -P 3306

需要我提供:

  • SSH 隧道连接示例?
  • 自动化脚本一键配置?
  • 针对云数据库 TDSQL-C(原 CynosDB)的配置差异?

欢迎告诉我你的具体场景,我可进一步定制方案。