mysql数据库默认情况下只允许本地连接,若需要让其他服务器或本地客户端远程访问mysql实例,就需要手动设置对应的用户权限。下面详细介绍完整的设置流程和相关注意事项。

一、查看当前用户权限
首先登录到mysql数据库服务器,查看现有用户的主机限制,确认需要修改的用户信息。使用root用户登录mysql后,执行以下命令查看用户表:
-- 切换到mysql系统库 USE mysql; -- 查询用户和对应的允许访问主机 SELECT user, host FROM user;
查询结果中host字段为localhost的用户仅允许本地连接,host为%的用户允许所有远程地址连接,也可以配置为指定IP段。
二、设置远程连接权限
1. 授权新用户远程访问
如果需要新建一个允许远程连接的用户,可以使用GRANT命令直接创建并授权:
-- 创建用户test,密码为Test@123,允许所有远程地址访问 GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'Test@123' WITH GRANT OPTION; -- 仅允许192.168.0.1这个IP访问 -- GRANT ALL PRIVILEGES ON *.* TO 'test'@'192.168.0.1' IDENTIFIED BY 'Test@123' WITH GRANT OPTION;
上述命令中*.*表示所有数据库的所有表,也可以根据需要修改为指定数据库,比如test_db.*表示仅授权test_db数据库的所有表。
2. 修改已有用户的host权限
如果需要让已有的本地用户支持远程连接,可以修改该用户的host字段:
-- 将用户名为test的用户的host修改为%,允许所有远程地址访问 UPDATE user SET host = '%' WHERE user = 'test'; -- 修改完成后刷新权限 FLUSH PRIVILEGES;
三、刷新权限使配置生效
无论是新增用户授权还是修改已有用户权限,都需要执行刷新权限命令,让配置实时生效:
FLUSH PRIVILEGES;
四、检查服务端配置
如果权限配置完成后仍然无法远程连接,需要检查mysql服务端的配置文件,确认是否绑定了本地地址。打开mysql配置文件my.cnf(Linux系统)或my.ini(Windows系统),找到bind-address配置项:
-- 如果配置为如下内容,仅允许本地连接 bind-address = 127.0.0.1 -- 需要修改为如下内容,允许所有地址连接 bind-address = 0.0.0.0
修改完成后重启mysql服务即可。
五、常见权限问题排查
- 确认用户密码是否正确,远程连接时需要使用授权的密码
- 确认mysql服务端口(默认3306)是否对外开放,防火墙是否放行对应端口
- 确认
host配置是否符合预期,不要误将%写成localhost - 执行
SHOW GRANTS FOR 'test'@'%';查看指定用户的完整权限,确认授权是否生效
六、权限回收示例
如果不再需要某个用户的远程连接权限,可以回收对应的权限或者删除用户:
-- 回收test用户的所有权限 REVOKE ALL PRIVILEGES ON *.* FROM 'test'@'%'; -- 删除test用户 DROP USER 'test'@'%'; -- 刷新权限 FLUSH PRIVILEGES;