从所有主机的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 / TCP为0.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的持久性 。
现在所有的作品都很棒