从所有主机的MySQL根访问

我在远程Ubuntu机器上安装了MySQL服务器。 root用户在mysql.user表中是这样定义的:

 mysql> SELECT host, user, password FROM user WHERE user = 'root'; +------------------+------+-------------------------------------------+ | host | user | password | +------------------+------+-------------------------------------------+ | localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | | ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | +------------------+------+-------------------------------------------+ 

我可以使用标准mysql客户端从同一个远程机器命令行界面以root用户访问。 现在,我想允许从互联网上的每个主机的根访问 ,所以我尝试添加以下行(这是除了host列以前的转储的第一行的确切副本):

 mysql> SELECT host, user, password FROM user WHERE host = '%'; +------------------+------+-------------------------------------------+ | host | user | password | +------------------+------+-------------------------------------------+ | % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | +------------------+------+-------------------------------------------+ 

但我个人电脑上的客户仍然告诉我(我模糊了服务器IP):

SQL错误(2003):无法连接到'46 .xxx'(10061)上的MySQL服务器

我不知道这是一个身份validation错误还是networking错误。 在服务器防火墙上,我启用了端口3306 / TCP0.0.0.0/0 ,对我来说没关系…

在这个过程中有两个步骤:

a)授予特权。 以root用户身份执行:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 

b)绑定到所有地址:

最简单的方法是注释掉 my.cnf文件中的行:

 #bind-address = 127.0.0.1 

并重新启动mysql

 service mysql restart 

默认情况下,它仅绑定到localhost,但是如果注释该行,则绑定到它find的所有接口。 注释掉这一行相当于bind-address=*

要检查mysql服务绑定在哪里,以root身份执行:

 netstat -tupan | grep mysql 

更新为Ubuntu 16:

configuration文件是(现在)

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

(至less在标准的Ubuntu 16上)

运行以下查询:

use mysql;

update user set host='%' where host='localhost'

注:不build议用于生产用途。

有时

bind-address = 127.0.0.1

应该

bind-address = *

如果你有很多networking连接到你的操作系统,你必须在my.conf文件的bind-addres中指定一个这个networking。 一个例子:

 [mysqld] bind-address = 127.100.10.234 

这个IP来自ethXconfiguration。

在我的情况下,“绑定地址”设置是问题。 在my.cnf注释这个设置并没有帮助,因为在我的情况下,由于某种原因,mysql将默认值设置为127.0.0.1。

要validationMySql当前使用的设置,请打开本地框上的命令行:

 mysql -h localhost -u myname -pmypass mydb 

读出当前设置:

 Show variables where variable_name like "bind%" 

你应该在这里看到0.0.0.0,如果你想允许所有主机的访问。 如果不是这样,请编辑/etc/mysql/my.cnf并在[mysqld]部分下设置bind-address:

 bind-address=0.0.0.0 

最后重新启动你的MySql服务器来获取新的设置:

 sudo service mysql restart 

再试一次,检查新设置是否被拾取。

在Raspbian上运行的MariaDB – 包含绑定地址的文件很难查明。 MariaDB对这个主题有一些不是非常有帮助的信息 。

我用了

 # sudo grep -R bind-address /etc 

find该死的东西在哪里。

我也必须像上面指出的每个人一样设置mysql的权限和主机。

而且还有一些开心的时间打开3306端口远程连接到我的树莓派 – 最后使用iptables的持久性 。

现在所有的作品都很棒