
我正在開發一個項目,需要 2 個 Raspberry Pi 來共享一些資料。
我認為使用 MySQL 資料庫對我來說是最方便的,因為我在這方面有一些經驗。我已經安裝了Apache、MariaDB以及MySQL資料庫所需的所有工具;建立 SD 卡的副本;我在兩台 Raspberry Pi 上使用相同的工具和程序,這意味著在兩台 Raspberry PI 機器上我可以使用http://localhost/phpmyadmin
.
現在,我希望我的主 Raspberry Pi 擁有其資料庫,http://localhost/phpmyadmin
並且我希望在我的輔助 Raspberry Pi 上存取該資料庫。由於我知道主 Raspberry Pi 的 IP 位址,輔助 Raspberry Pi 應該能夠透過從瀏覽器連接到 PHPMyAdmin 來存取該資料庫,如下所示:
http://192.168.61.170/phpmyadmin
(192.168.61.170 是我想要存取的主 Raspberry PI 的 IP在我的輔助PI 機器上)。但是,我收到“無法訪問該網站”錯誤。
經過一番閱讀後,我意識到我可能需要更改bind_address
MySQL 設定。我已經在我的主 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。
輔助樹莓派:
答案1
我想指出的是,這裡沒有任何特定於 Raspberry Pi 的內容。您只有兩台計算機,其中一台託管資料庫伺服器,另一台計算機想要連接到該資料庫伺服器。以下內容與 MySQL 及其克隆完全相關,即 Percona、MariaDB(您可能正在使用的那個)。
解決步驟:
I. 檢查 TCP/IP 是否可用:
2nd-RPi$ telnet 192.168.61.170 3306
(據我了解,這是託管資料庫的電腦的位址)。連線成功意味著MySQL服務正在監聽,防火牆根本沒有阻止。
如果無法連接,請檢查第一個 RPi:
- 如果它正在偵聽,
ss -lnpt
(或netstat -lnpt
) 必須顯示 mysqld 正在偵聽 TCP 連接埠上的3306
位址0.0.0.0
或::
或*
或您連線的本機外部位址,例如192.168.61.170
。
LISTEN 0 70 *:3306 *:* users:(("mysqld",pid=505,fd=32))
- 如果防火牆允許連線。一般來說,這是一個相當長的主題,我經常建議發出
iptables-save
並閱讀其整個輸出,這是一個完整的防火牆配置。我覺得防火牆配置不是這個答案的主要主題,所以如果這是問題,最好探索其他問題 - 這個主題已經很好地涵蓋了。
二.現在您必須有一個允許從其他主機存取的 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 是否阻止連接的一種快速但非常骯髒的方法是
- 試著從一個樹莓派 ping 到另一個樹莓派,反之亦然
- 要嘗試透過乙太網路連接兩個樹莓派,請為樹莓派設定同一範圍內的兩個靜態IP,然後嘗試ping,然後嘗試telnet(請注意,這僅用於測試,因為您將無法使用WIFI )同時)
如果其中任何一個都有效,問題可能出在您的 WIFI 上。如果沒有,您可以嘗試使用 tcpdump 來查看封包是否離開您的樹莓派客戶端和/或到達您的 BDD 伺服器:
您的情況下的基本 tcpdump 命令範例是tcpdump -i <connected_interface> host <other_raspberry_ip>
,帶有connected_interface
您的網路連接介面的名稱(運行ifconfig
或ip a
查看您的介面)。您可以在兩個樹莓派上執行此命令,然後使用 ping 或 telnet 並查看它們的輸出。您應該會看到資料包出現在兩個樹莓派上。
如果防火牆阻止了某些內容,則查看 /var/log/messages 應該會顯示它。
答案3
我可以確認這與網路設定有關。我已經連接到其他網絡,看起來工作正常!
我通常使用的網路不允許兩個單獨的設備之間的連接。互相 Ping 會導致目標主機無法存取錯誤。
我想我需要存取我的路由器設定並修改其中的某些內容?