一尘不染

来自所有主机的MySQL根访问

mysql

我已经在远程Ubuntu计算机上安装了MySQL服务器。通过以下方式rootmysql.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 |
+------------------+------+-------------------------------------------+

我可以root使用标准mysql客户端从同一远程计算机命令行界面与用户访问。现在,我想
允许来自Internet上每台主机的root用户访问权限 ,因此我尝试添加以下行(这与上一转储的第一行完全相同,但该host列除外):

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

但是我个人PC上的客户端继续告诉我(我掩盖了服务器IP):

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

我不知道是身份验证错误还是网络错误。在服务器防火墙上,我为端口 3306 / TCP 启用了 0.0.0.0/0 ,这对我来说是可以的…


阅读 413

收藏
2020-05-17

共1个答案

一尘不染

该过程有两个步骤:

a)授予特权。以root用户身份执行此操作,'password'并用您当前的root密码代替:

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

b)绑定到所有地址:

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

#bind-address = 127.0.0.1

然后重启mysql

service mysql restart

默认情况下,它仅绑定到本地主机,但是如果您注释该行,它将绑定到它找到的所有接口。注释掉该行等效于bind-address=*

要检查mysql服务绑定的位置,请以root身份执行:

netstat -tupan | grep mysql

Ubuntu 16更新

配置文件是(现在)

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

(至少在标准Ubuntu 16上)

2020-05-17