aliyun Ubuntu Mysql 无法远程访问

        今天工作中要在本地链接我的阿里云MySQL,在服务器本身命令行下链接MySQL数据库一点问题都没有,远程连接却死活链接不上去,网上查资料说是MySQL没有开启远程访问权限,网上的信息或许有些陈旧,最终还是自己摸索着把问题解决了,现在把问题现象及解决过程记录在此,希望能给后来者提供一点儿帮助。

问题重现:

在windows下用MySQL WorkBench 远程登录错误提示如下:

aliyun Ubuntu Mysql 无法远程访问


在linux命令行下登录提示错误如下:

aliyun Ubuntu Mysql 无法远程访问

[email protected]:~# mysql -h119.23.xxx.xxx -uroot -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '119.23.xxx.xxx' (111)
[email protected]:~#


解决方法:

第一步: 授予用户远程登录的权限

1.查看root用户是否有远程登录的权限

use mysql;

Database changed
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host         | user | password                                  |
+--------------+------+-------------------------------------------+
| localhost    | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
2 rows in set (0.00 sec)

   可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名。

从上表中可以看出root用户只允许在 localhost 上登录,故不能实现远程登录。 如果你想用某个IP登录,那么可以将以上的Host值改为指定的Ip即可。有没有方法可以让任意IP都可以登录呢?当然有了,请往下看。

2、实现远程连接(授权法)

   将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。   

   update user set host = ’%’ where user = ’root’;

然而现在已经将root用户设置为允许远程登陆了,可是仍然登录不上。

从其一下服务器,如果你也没有解决,请继续向下看:

3. 检查配置文件

最后检查配置/etc/mysql/my.cnf :

是否有配置skip_networking: 这使MySQL只能通过本机Socket连接(socket连接也是本地连接的默认方式),放弃对TCP/IP的监听,当然也不让本地java程序连接MySQL。——没有这个配置。
是否有配置bind_address=127.0.0.1(当然也可以是其他ip),这种情况可以指定TCP/IP连接 。有这个配置,把它注销掉,重启mysql。


4.我最终的解决方法是:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

注释掉下面没有被注释的那句话

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
#
# * Fine Tuning

#

上图中没有被注释的那句话的意思是,数据库绑定IP地址 127.0.0.1,只能在本地登录,不能通过公网IP登录,把这句话注释掉就可以远程连接了。

5.总结

实现MySql数据库远程连接需满足一下条件:

    1. 数据库允许通过公网IP地址登录,这是个大前提

    2. 数据库用户拥有远程登录的权限,比如上文中要为root用户开放任意IP都能登录的权限。