前言
数据库不论是Mysql亦或是SqlServer,安装在本地,使用起来 简单方便,但是当你要卸载它们的时候,卸载不干净又无能为力的时候,是真让上火!(尤其是SqlServer,至今我怀疑我电脑还残留着部分余孽),这时候把数据库装在虚拟机或者服务器上就舒服多了。但是安装简单,远程连接却常出现以下几个问题导致无法连接或一些其他问题。下面是总结的是一些常见问题供打家参考!
1、防火墙没开启对应端口
以mysql为例,检查端口是否开启,如果没有开启的情况下,仅本允许服务器本身能够进行访问。
虚拟机的Linux操作系统(CentOS 7)的话对应指令开启端口参考以下链接:
CentOS 7防火墙相关指令
如果是阿里云服务器的话,需要在服务器控制台中自行添加防火墙规则设置运行3306端口,如下:
2、数据库远程访问权限没开启
可以先自行查询,首先连接上本机Mysql:
#回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>
mysql -uroot -p
服务器本机连接上mysql后执行以下命令:
#数据库中有一张user表记录所有用户,以下命令就是查看所有用户及其访问权限
SELECT user,host FROM mysql.user;
我这里的查询结果如下:
可以发现用户root对应的host一个是%,一个是localhost.
localhost表示只允许本地访问,%表示可以任意ip访问。如果你查询到的用户没有对应host为%,则说明mysql用户权限没有给到该用户远程访问权限。
那么此时只需修改root的对应权限就行了,执行以下语句:
use mysql;
update user set host='%' where user='root';
3、数据库远程连接后新建数据库出错
在远程连接后当想要建数据库时却提示如下错误:
1044 -Access denied for user 'root'@'%' to database
这个问题的原因还是用户权限的问题,解决方法是先在你的服务器中连接上MySQL,可以查看用户权限表,代码如下:
SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
注意看host为%的那一条记录,我这里是权限正常的,就是两个Y,如果查询到是N的话,就需要你执行语句给到远程连接的root用户建表建库的权限。
即执行以下命令:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
执行完后,重新使用navicat进行连接并进行建表建库操作,发现正常执行。
4、总结
mysql远程连接的一系列问题基本都是由于权限所引起的,只要用户权限分配到位了,基本不会有什么问题,希望这篇文章能够帮助到诸位。