详解mysql如何配置远程链接,解决各种连接问题

https://www.cnblogs.com/s-b-b/p/5974332.html

1.问题分析

基本每个mysql都会有名为mysql的数据库,里面存放的是mysql的核心东西,其中user表里面就有mysql连接的用户信息,里面的字段有如下

1.Host    (允许连接的主机,%代表全部主机可以连接)

2.User    (连接的用户名)

3.password  (连接的密码,密码用mysql自带的password函数加密)

4.Select_priv   (是否允许查询,Y表示允许,N表示拒绝)

5.Alter_priv  (是否允许插入数据,Y表示允许,N表示拒绝)

剩下都是一堆权限,和Select_priv的设置一样,其实组合起来就很容易理解了,处在host地址的用户User可以通过密码password访问数据库对应的权限。

举个粟子:例如有以下记录(省略部分权限字段)

+——+——————————————-+————–+————-+

| user | password | Host | Select_priv |
+——+——————————————-+————–+————-+
| root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | localhost | Y |

 

ip地址在localhost的用户root可以通过password函数加密之后密码*B16BCB720468FF0ED1..为访问数据库,并可以使用Select_priv权限 。

相信看到这里你已经明白了为什么,怎么不能连接mysql呢?其实就是你的条件没有符合user表里的记录,只要符合 用户名(user),密码(password),主机地址(Host),你就能访问数据库,至于权限,那就得看后面对应的字段。

至于多条记录之间同一个用户是取交集还是取最新一条,我还没测试过,我出问题的时候查询数据库是有以下记录。

 +——+——————————————-+————–+————-+

| user | password | Host | Select_priv |
+——+——————————————-+————–+————-+
| root | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | % | Y |
| root |  | localhost  | N|

那时候远程访问需要密码,但是可以全部权限可以访问,但是在本地用命令行mysql -uroot -p密码 连数据库输了密码就错,一狠心不输入密码,居然可以了,但是什么权限都没有。一查数据库看到上面的数据顿时知道出什么事了…

最后一条记录localhost限制了访问权限,之后我一样在本地访问,但是指定了一下ip地址,让mysql认为我是127.0.0.1,就可以访问全部权限了…

2.解决问题

相信看到很多人就知道怎么做了,如果要远程访问数据库,只需要把拥有全部权限的root账号对应的记录的Host字段改为%就可以了。在我这里数据库显示是这样子(忽略若干权限…一般root账户如果后面Select_priv为Y,其他一般都全为Y)。

mysql> select user,Host,password,Select_priv from user;

+——+————–+——————————————-+————-+
| user | Host | password | Select_priv |
+——+————–+——————————————-+————-+
| root | localhost | *B16BCB720468FF0ED1F0A3A179FFDC66F044CC5C | Y |
| root | iz289q95684z | | Y |
| root | 127.0.0.1 | | Y |
| root | ::1 | | Y |
| | localhost | | N |
| | iz289q95684z | | N |
+——+————–+——————————————-+————-+

只要把第一条记录改为的Host改为%就好了

以下是命令:  

update user  set Host = '%' where Host = 'localhost' & user = 'root'; 
flush privileges;

以上第一条命令为修改允许访问的主机地址

第二条命令为刷新权限

只要执行上面的两条命令就能远程访问服务器。当然啦,具体情况具体分析,可能你本地的数据库记录和我的不同,那么你只需要按着上面的介绍去调整就好了,最后别忘了执行flush privileges刷新一下。

3.特殊情况

如果你还是没有解决问题,远程连接还是连接不上,那么很有可能是你的mysql配置文件绑定了本地,你可以找到本地的mysql配置文件去进行修改,mysql配置文件叫my.cnf,如果找不到路径可以用locate my.cnf去查找,在我这里就是/etc/mysql/my.cnf。在里面你会看到一系列的mysql配置信息,找到里面的bind-address,这个就是万恶之源。把他注释掉(在前面加#)再重启mysql就OK了。

万恶的mysql,终于看到连接成功页面了。。。