如何远程连接mysql_mysql远程访问配置

要实现MySQL远程访问,需同时修改配置文件绑定地址为0.0.0.0、创建授权远程用户并刷新权限、开放3306端口防火墙及云安全组,缺一不可。

MySQL 默认只允许本地连接,要实现远程访问,需同时修改服务端配置、用户权限和系统防火墙设置。单独改某一项通常无法成功。

1. 修改 MySQL 配置文件,允许监听外部地址

MySQL 服务默认绑定在 127.0.0.1(仅本地),需改为监听所有 IP 或指定 IP:

  • 编辑配置文件(Linux 常为 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf;Windows 为 my.ini
  • 找到 bind-address 行,将其改为:
    bind-address = 0.0.0.0(监听所有 IPv4 地址)
    或指定服务器公网/内网 IP(如 bind-address = 192.168.1.100
  • 保存后重启 MySQL 服务:
    sudo systemctl restart mysql(Ubuntu/Debian)
    sudo systemctl restart mysqld(CentOS/RHEL)

2. 创建或授权远程访问用户

root 用户默认可能禁止远程登录,建议新建专用用户并赋权:

  • 登录 MySQL:
    mysql -u root -p
  • 创建新用户(示例用户名 remote_user,密码 SecurePass123,允许从任意主机连接):
    CREATE USER 'remote_user'@'%' IDENTIFIED BY 'SecurePass123';
  • 赋予必要权限(如只读可改用 SELECT):
    GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
  • 刷新权限:
    FLUSH PRIVILEGES;

⚠️ 注意:'%' 表示任意主机,生产环境建议限定为具体 IP(如 'remote_user'@'192.168.1.50')以提升安全性。

3. 开放服务器防火墙端口

MySQL 默认使用 3306 端口,需确保该端口对外可达:

  • Ubuntu/Debian(UFW):
    sudo ufw allow 3306
    sudo ufw reload
  • CentOS/RHEL(firewalld):
    sudo firewall-cmd --permanent --add-port=3306/tcp
    sudo firewall-cmd --reload
  • 云服务器(如阿里云、腾讯云)还需在安全组中手动放行 3306 端口

4. 连接测试与常见问题

在远程客户端执行连接命令验证:

  • 命令示例:
    mysql -h 服务器公网IP -P 3306 -u remote_user -p
  • 若提示 ERROR 2003 (HY000): Can't connect to MySQL server,检查:
    — MySQL 是否真正监听 0.0.0.0(运行 netstat -tuln | grep :3306
    — 防火墙/安全组是否生效
    — 用户 host 是否匹配(SELECT Host, User FROM mysql.user;
  • 若提示 Access denied,重点核查用户权限和密码是否正确,注意大小写及特殊字符转义