Ubuntu系统下打开MySQL数据库远程访问权限
第一步:设置MySQL数据库允许远程访问
1.查看数据库用户表
MySQL数据库在默认情况下是只允许本地连入的,即用户仅能为“localhost”,具体信息可以用以下方法查看:
打开终端,输入
$ mysql -u root -p
进入mysql数据库,然后进入数据库“mysql”
mysql> use mysql
在数据库中查询“user”表中的“User”和“Host”信息
mysql> SELECT `Host`,`User` FROM user;
查询结果如下
+--------------+-------------------------+
| Host | User |
+--------------+-------------------------+
| localhost | root |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
+--------------+-------------------------+
4 rows in set (0.00 sec)
可以看到用户“root”的Host是localhost,代表仅允许root用户在数据库所在设备登录,如果想使用root用户远程访问数据库,需要将“localhost”改为“%”(也可以新建一个允许远程访问的User,这样可以分开管理权限);
2.开启远程访问权限
开启远程访问权限可以使用赋权操作
使用赋权操作:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
(网上有直接修改“user”表的操作,我一开始也使用的这种办法,没有效果,还是无法远程访问,改为赋权操作后可以,怀疑只修改表的操作有问题)
此时再查询用户表会发现用户“root”的“Host”变为了“%”,这样数据库的修改就结束了
+--------------+-------------------------+
| Host | User |
+--------------+-------------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
+--------------+-------------------------+
4 rows in set (0.00 sec)
第二步:检查防火墙状态
即使在数据库中开放了权限,但没有在防火墙中开放使用的端口,远程设备仍然无法连接到数据库,当尝试ping数据所在设备IP没问题,但测试端口出现无响应的问题时,大概率是因为防火墙阻止了此端口的访问,可以通过以下方式查看
$ sudo ufw status
显示结果分为两种:
结果1:
状态:不活动
代表防火墙未打开;
结果2:
状态: 激活
至 动作 来自
- -- --
3306 ALLOW Anywhere
3306 (v6) ALLOW Anywhere (v6)
代表防火墙已打开,并开放3306端口;
当防火墙打开且没有开放所需端口时,远程设备无法访问,可以通过关闭防火墙或设置所需端口开放或设置对远程设备IP开放所有端口的操作解决;
关闭防火墙:
$ sudo ufw disable
设置端口3306开放:
$ sudo ufw allow 3306
设置对特定IP开放所有端口:
$ sudo ufw allow from 192.168.255.255
修改完防火墙后需要重启电脑生效,重启完成后即设置数据库允许远程访问完成。
总结
1.开启数据库远程访问权限时不要直接修改“user”表的内容,使用赋权语句;
2.防火墙在关闭状态下可以允许任意来源的访问;
3.如果不想关闭防火墙需要开放端口或允许来自特定IP的访问;