情况1:

有时候需要部署多个虚拟机并安装MySQL,于是乎就会有这样那样的问题。

比如说刚安装完Ubuntu Server 14.04,并且自己安装好了MySQL,想用Navicat访问一下数据库。

Duang!提示我连不上,提示内容是Can't connect to MySQL server on '192.168.1.191' (10038)。

出现这个提示无外乎就一种可能性,那就是访问的主机有效但是没有开放服务端口。

知道了问题我们就要去解决;

执行命令:

sudo vim /etc/mysql/my.cnf



编辑my.cnf文件

绑定端口的设置在my.cnf配置文件中,由于使用Ubuntu Server版安装的默认

MySQL配置,因此在my.cnf当中多出了

bind-address            = 127.0.0.1

这么一行,这分明是绑定在了回环网卡地址上嘛,除了本机谁都访问不了。

因此我们的解决方法是,将此行注释掉,或者地址改为0.0.0.0以向任何地址暴露端口。

保存文件。然后我们就需要让MySQL的配置生效了,依次执行:

sudo service mysql stop
sudo service mysql start



我们就可以通过数据库管理客户端去访问MySQL数据库了。

情况2:


以上的内容配置完毕后,我们尝试连接一下数据库,依然是不能连接,但是这一次报错的提示不一样了

提示变成了“ Host '192.168.1.100' is not allowed to connect to this  MySQL server”,这个问题是访问权限没有配置给其他IP地址的原因导致的,也是为了安全。

我们重新通过ssh连接到虚拟机上,进入执行命令:

mysql -u root -p

输入我们的root的密码回车

mysql>

我们这时候需要赋予root用户通过其他地址登录数据库的权限。我们为了测试,那么就先让任意地址连接数据库端口。执行如下命令:

mysql>  grant all privileges on *.* to 'root'@'%' identified by '你的root用户密码' with grant option;

然后刷新权限

mysql>flush privileges;

这时候,就可以允许任何IP去访问数据库了。

不过注意, 'root'@'%' 有安全隐患,它实际上在mysql数据库的user表里面增加了一个root账户,允许任何地址连接数据库。%会匹配任何IP地址

因此在生产环境当中,必须指定一个新的用户名并与之对应的地址去访问数据库。比如 'phpsite'@'112.131.7.65' 。

实际上,以上解决root用户任意地址访问数据还可以直接通过修改表数据的方式去解决。

可以参考如下命令。

mysql>use mysql; 
mysql>update user set host = '%' where user = 'root'; 
mysql>select host, user from user;

不要忘记刷新属性
mysql>flush privileges;


OK,我们现在可以用数据库客户端访问数据库了。