要让 MySQL 支持远程访问需两步:一是修改配置文件 bind-address 为 0.0.0.0 并重启服务,二是创建或授权用户如 'remote_user'@'%' 并刷新权限,最后确保防火墙及云安全组放行 3306 端口。
要让 MySQL 支持远程访问,核心是两步:修改绑定地址允许外部连接,再给指定用户授予远程登录权限。缺一不可,否则即使账号有权限也连不上,或能连上但被拒绝访问数据库。
MySQL 默认只监听本地(127.0.0.1),需改为监听所有 IP 或指定网卡。
/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf;Windows 是 my.ini(在 MySQL 安装目录下)bind-address 这一行,将其改为:bind-address = 0.0.0.0(监听所有 IPv4 地址)bind-address = 192.168.1.100
sudo systemctl restart mysql(Ubuntu/Debian)sudo service mysqld restart(CentOS/RHEL)必须用 root 或高权限账号登录本地 MySQL(mysql -u root -p),然后执行授权语句。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFI
ED BY '你的密码' WITH GRANT OPTION;
remote_user,密码 SecurePass123):CREATE USER 'remote_user'@'%' IDENTIFIED BY 'SecurePass123';GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;
即使 MySQL 配置正确,防火墙也可能拦截连接请求。
sudo ufw allow 3306
sudo firewall-cmd --permanent --add-port=3306/tcpsudo firewall-cmd --reload
从另一台机器用客户端测试,确认是否生效:
mysql -h 服务器公网IP -u remote_user -p
ERROR 1130: Host 'x.x.x.x' is not allowed to connect → 用户授权未生效或 host 不匹配Can't connect to MySQL server → 网络不通、防火墙拦截、MySQL 未监听 0.0.0.0 或服务未启动配置本身不复杂,但每一步都可能成为连接失败的原因。建议按顺序检查:配置文件 → 授权语句 → 防火墙 → 远程测试。安全起见,生产环境尽量避免开放 root 远程登录,且限制可连接的 IP 范围(把 @'%' 换成 @'192.168.1.%' 或具体 IP)。