如何远程连接 mysql 服务器?

如何远程连接 mysql 服务器?

我希望我的 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

相关内容