我希望我的 mysql 服务器可以通过 ip 进行远程访问192.168.1.3
所以我改变了 /etc/mysql/my.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
bind-address = 192.168.1.3
但我仍然得到 ceres 不允许进入 MySQL。
$ mysql -u username -h 192.168.1.3 -p
Enter password:
ERROR 1130 (HY000): Host 'ceres' is not allowed to connect to this MySQL server
运行 mysql 服务器的服务器是 ceres @ 192.168.1.3
mysql> SHOW VARIABLES WHERE Variable_name = 'hostname';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| hostname | ceres |
+---------------+-------+
1 row in set (0.00 sec)
根据谷歌搜索结果,我这样做了
mysql> SELECT host FROM mysql.user WHERE User = 'root';
+-------------+
| host |
+-------------+
| 127.0.0.1 |
| ::1 |
| localhost |
| raspberrypi |
+-------------+
4 rows in set (0.00 sec)
它没有列出试图插入 sql db 的远程客户端的 ip !所以我添加了 root 以从远程运行
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.177';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT host FROM mysql.user WHERE User = 'root';
+---------------+
| host |
+---------------+
| 127.0.0.1 |
| 192.168.1.177 |
| ::1 |
| localhost |
| raspberrypi |
+---------------+
5 rows in set (0.00 sec)
我也运行了上述 pn %
。
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT host FROM mysql.user WHERE User = 'root';
+---------------+
| host |
+---------------+
| % |
| 127.0.0.1 |
| 192.168.1.177 |
| ::1 |
| localhost |
| raspberrypi |
+---------------+
6 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES;
现在在远程机器上我仍然收到此错误:
错误:76 = 拒绝用户“root”@“192.168.1.177”访问(使用密码:是)。
答案1
我终于明白了
默认情况下,my.conf 可能有一个127.0.0.1
绑定到3306
端口的 IP 地址。在我的例子中,我在 raspberry pi 3 上运行了 mysql 服务器,它的 IP 是192.168.1.145
。因此,为了让远程客户端直接推送到远程 mysql 服务器上的数据库,你应该将 mysql 服务器 IP192.168.145
绑定到3306
在其上运行的 mysql 服务器的端口。这样,你的 arduino 以太网屏蔽通过 LAN 连接到的本地网络上的远程客户端就可以看到 MySQL 服务器。然后你登录到 mysql 服务器,并创建一个用户:
CREATE USER 'myuser'@'192.168.156' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
然后您授予如下所示的权限。
GRANT ALL ON *.* TO 'myuser'@'192.168.156';
GRANT ALL ON *.* TO 'myuser'@'%';
重要提示:上面的 mysql 查询中显示的 ip 地址192.168.156
是我的以太网客户端与 mysql 远程服务器上的数据库建立连接的 ip 地址。
就是这样。这对我有用。
答案2
如果你的 Web/应用服务器或客户端有静态 IP,则应执行此命令
CREATE USER '<user>'@'<client/server IP' IDENTIFIED BY '<pass>';
但服务器或客户端没有静态IP
CREATE USER '<user>'@'%' IDENTIFIED BY '<pass>;
并执行授予权限或访问权限。
Debian 或 Ubuntu 服务器
$ufw allow mysql
或者 CentOS、RHEL
$firewall-cmd --zone=public --add-service=mysql