2 Raspberry PI 连接到同一网络上的同一 MYSQL 数据库

2 Raspberry PI 连接到同一网络上的同一 MYSQL 数据库

我正在开展一个需要 2 个 Raspberry Pi 共享一些数据的项目。

我认为使用 MySQL 数据库对我来说最方便,因为我在这方面有一些经验。我已经安装了 Apache、MariaDB 和 MySQL 数据库所需的所有工具;创建了 SD 卡的副本;并且我在两个 Raspberry Pi 上使用相同的工具和程序,这意味着在两个 Raspberry PI 机器上我都可以使用 访问单独的 MySQL 数据库http://localhost/phpmyadmin

现在,我希望主 Raspberry Pi 的数据库处于打开状态http://localhost/phpmyadmin,并且我希望在辅助 Pi 上访问该数据库。由于我知道主 Raspberry Pi 的 IP 地址,因此辅助 Raspberry Pi 应该能够通过从浏览器连接到 PHPMyAdmin 来访问该数据库,如下所示: http://192.168.61.170/phpmyadmin(192.168.61.170 是我主 Raspberry PI 的 IP,我希望在辅助 PI 机器上访问它)。但是,我收到“无法访问该站点”错误。

读了一会儿之后,我意识到我可能需要更改bind_addressMySQL 配置。我已经在主 Raspberry PI 上完成了此操作,并将其更改为0.0.0.0

我已经通过命令确认:

sudo netstat -tlnpu | grep mysql

在此处输入图片描述

但是,当我使用 IP 地址访问辅助 Raspberry Pi 时,我仍然无法访问 PHPMyAdmin 页面。我还在某处读过一个帖子,其中提到防火墙阻止 3306 端口存在一些问题。

我已经运行了这个命令:

firewall-cmd --get-active-zones

而且看起来我甚至没有安装防火墙,因为输出显示:

firewall-cmd: command not found

所以就我的情况来说防火墙应该没有问题。

有人可以建议我一些其他方法如何调试/解决这个问题,以便能够连接到我的辅助 Pi 上的 MySQL 吗?

请记住,两台 Raspberry PI 机器都连接到同一个 WiFi。

次要 Raspberry PI:

在此处输入图片描述

答案1

我想指出的是,这里没有关于 Raspberry Pi 的具体内容。您只有两台计算机,其中一台托管数据库服务器,另一台想要连接到该服务器。以下内容与 MySQL 及其克隆版本(即 Percona、MariaDB(您可能正在使用的版本))完全相关。

解决步骤:

一、检查TCP/IP是否可用:

2nd-RPi$ telnet 192.168.61.170 3306

(据我理解,这是托管数据库的计算机的地址)。成功连接意味着 MySQL 服务正在监听,防火墙根本没有阻止。

如果无法连接,请检查第一个 RPi:

  1. 如果正在监听,ss -lnpt(或netstat -lnpt)必须显示 mysqld3306在地址0.0.0.0::或或*您连接的本地外部地址上的 TCP 端口上监听,如192.168.61.170
LISTEN   0  70     *:3306      *:*  users:(("mysqld",pid=505,fd=32))
  1. 如果防火墙允许连接。一般来说,这是一个很长的话题,我经常建议发布iptables-save并阅读其整个输出,这是一个完整的防火墙配置。我觉得防火墙配置不是这个答案的主要主题,所以如果这是问题,最好探索其他问题——这个主题已经涵盖得很好了。

II. 现在您必须有一个允许从其他主机访问的 MySQL 用户。

在 MySQL 中,用户不仅有名称和密码,还有允许连接的主机。例如,当您使用GRANT命令添加用户时,您还会配置以下内容:

`GRANT ALL PRIVILEGES ON `mydatabase`.* TO 'username'@'hostname' IDENTIFIED BY 'password';

主机名可能是一个百分号%,它是 MySQL 中的通配符,即它应该允许来自“任何主机”的连接。

要检查你的用户是否有能力从其他主机连接,请从你的 MySQL 工作的地方连接到它并检查表mysql.user

SELECT `Host`, `User`, `Password` FROM `mysql`.`user`;

(这些是反引号,在这种情况下它们不是绝对必要的,但如果表名或字段名或数据库有一些特殊符号或与某些关键字冲突,则需要它们,因此使用它们是一个好习惯)

它将显示您的所有用户。密码是不可逆的,这是正常的。如果没有允许来自其他主机的用户记录,您可以创建它,您可以使用我上面显示的命令来创建它(%而不是主机名)。

可以在 MySQL 参考手册的第访问控制和帐户管理

答案2

由于我暂时无法发表评论,因此将此作为答案发布。我假设您使用的是家庭网络,并且可以暂时断开您的树莓派。

No route to host意味着你的树莓派找不到另一个。我发现这种情况最常发生在以下情况:A) 目标主机不可用/未连接或 B) 交换机或路由器阻止流量。这可能是你的 WIFI 的安全功能,不允许不同的工作站相互联系。如果你通过以太网连接你的工作站,则可能不会配置相同的保护。

一个快速而又粗暴的方法来检查你的 WIFI 是否阻止连接是

  1. 尝试从一台树莓派 ping 另一台树莓派,反之亦然
  2. 要尝试通过以太网连接两个树莓派,请为树莓派设置两个相同范围内的静态 IP,然后尝试 ping,然后尝试 telnet(请注意,这仅用于测试,因为您不能同时使用 WIFI)

如果上述任一方法有效,则问题可能出在您的 WIFI 上。如果不行,您可以尝试使用 tcpdump 查看数据包是否离开您的客户端 raspberry 和/或到达您的 BDD 服务器:

您的案例中,一个基本的 tcpdump 命令示例是tcpdump -i <connected_interface> host <other_raspberry_ip>,带有connected_interface网络连接接口的名称(运行ifconfigip a查看您的接口)。您可以在两个树莓派上运行此命令,然后使用 ping 或 telnet 查看它们的输出。您应该会看到数据包出现在两个树莓派上。

如果防火墙阻止了某些东西,查看 /var/log/messages 应该会显示它。

答案3

我可以确认这与网络设置有关。我已连接到其他网络,似乎运行正常!

我通常使用的网络不允许两个单独的设备之间进行连接。互相 ping 会导致目标主机无法访问错误。

我认为我需要访问我的路由器设置并在那里修改一些内容?

相关内容