如何在mysql中配置远程访问权限

需配置用户权限、bind-address和防火墙。先创建可远程登录用户并授权,再将bind-address设为0.0.0.0,最后开放3306端口,重启服务后测试连接。

要在 MySQL 中配置远程访问权限,需要从两个层面进行设置:MySQL 用户权限配置和服务器网络配置。只要其中一环没配好,远程连接就会失败。以下是具体操作步骤。

1. 修改 MySQL 用户权限

默认情况下,MySQL 用户只能从本地(localhost)登录。要允许远程访问,需为用户授予从指定或任意主机访问的权限。

示例:允许特定用户从任意 IP 连接

CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

说明:

  • 'your_user'@'%' 表示该用户可以从任何 IP 地址连接。
  • 如果只想允许某个 IP(如 192.168.1.100),可改为 'your_user'@'192.168.1.100'。
  • FLUSH PRIVILEGES 是刷新权限表,让更改立即生效。

2. 修改 MySQL 配置文件绑定地址

MySQL 默认只监听本地回环地址(127.0.0.1),需要修改配置使其监听所有网络接口。

找到 MySQL 配置文件 my.cnf 或 my.ini(Linux 通常在 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf,Windows 在安装目录下)。

找到 bind-address 这一行:

bind-address = 127.0.0.1

将其改为:

bind-address = 0.0.0.0

这表示 MySQL 将监听所有可用网络接口。保存文件后重启 MySQL 服务:

sudo systemctl restart mysql

3. 确保防火墙允许访问

即使 MySQL 允许远程连接,系统防火墙可能仍会阻止外部访问 3306 端口。

以 Ubuntu 使用 ufw 为例:

sudo ufw allow from 192.168.1.0/24 to any port 3306

或者开放给所有 IP(注意安全风险):

sudo ufw allow 3306

CentOS 使用 firewalld 的话:

sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

4. 测试远程连接

从另一台机器使用客户端测试:

mysql -u your_user -p -h your_mysql_server_ip

如果能成功登录,说明远程访问已配置完成。

基本上就这些。关键是用户权限、bind-address 和防火墙三者都正确设置。配置完成后建议限制访问 IP 范围,避免将数据库直接暴露在公网造成安全风险。