
私は、データを共有するために 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 は、セカンダリ PI マシンでアクセスしたいメインの Raspberry Pi の IP です)。ただし、「サイトにアクセスできません」というエラーが表示されます。
少し読んでみると、bind_address
MySQL 構成の を変更する必要があるかもしれないことに気付きました。メインの Raspberry PI でそれを実行し、 に変更しました0.0.0.0
。
以下のコマンドで確認しました:
sudo netstat -tlnpu | grep mysql
しかし、セカンダリ Raspberry Pi で IP アドレスを使用して PHPMyAdmin ページにアクセスしても、まだアクセスできません。ファイアウォールが 3306 ポートをブロックしているという問題があるというスレッドをどこかで読んだこともあります。
このコマンドを実行しました:
firewall-cmd --get-active-zones
出力には次のように表示されるため、ファイアウォールがインストールされていないようです。
firewall-cmd: command not found
したがって、私のケースではファイアウォールに問題はないはずです。
セカンダリ Pi で MySQL に接続できるようにこの問題をデバッグ/解決する他の方法についてアドバイスをいただけませんか?
両方の Raspberry PI マシンが同じ WiFi に接続されていることに注意してください。
セカンダリ Raspberry PI:
答え1
ここで Raspberry Pi に特有のことは何もないことを指摘しておきます。2 台のコンピューターがあり、そのうちの 1 台はデータベース サーバーをホストし、もう 1 台はそれに接続したいだけです。以下は、MySQL とそのクローン、つまり Percona、MariaDB (おそらく使用しているもの) に完全に関連しています。
解決手順:
I. TCP/IP で利用可能かどうかを確認します。
2nd-RPi$ telnet 192.168.61.170 3306
(私の理解では、これはデータベースをホストしているコンピュータのアドレスです)。接続が成功すると、MySQL サービスがリッスンしており、ファイアウォールがまったくブロックしていないことを意味します。
接続できない場合は、1 番目の RPi を確認してください。
- listen している場合、
ss -lnpt
(または) は、 のように、接続先のアドレスまたはまたはローカル外部アドレスのnetstat -lnpt
TCP ポートで listen している mysqld を表示する必要があります。3306
0.0.0.0
::
*
192.168.61.170
LISTEN 0 70 *:3306 *:* users:(("mysqld",pid=505,fd=32))
- ファイアウォールが接続を許可するかどうか。これは一般的にかなり長いトピックなので、私はよく、
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が接続をブロックしているかどうかを確認する簡単な方法は、
- 一方のラズベリーからもう一方のラズベリーにpingを送信してみる(その逆も)
- 両方のラズベリーをイーサネット経由で接続するには、ラズベリーに同じ範囲の 2 つの静的 IP を設定し、ping を実行してから、telnet を試します (これはテストのみを目的としており、同時に WIFI を使用することはできないことに注意してください)。
どちらかが機能する場合、問題はおそらく Wi-Fi にあります。機能しない場合は、tcpdump を使用して、パケットがクライアント ラズベリーから送信され、BDD サーバーに到達しているかどうかを確認してください。
この場合の基本的な tcpdump コマンドの例はtcpdump -i <connected_interface> host <other_raspberry_ip>
、 で、connected_interface
ネットワークに接続されたインターフェースの名前を指定します (インターフェースを表示するにifconfig
は、 またはを実行ip a
します)。このコマンドを両方のラズベリーで実行し、ping または telnet を使用して出力を確認します。両方のラズベリーにパケットが表示されるはずです。
ファイアウォールが何かをブロックしている場合は、/var/log/messages を確認するとそれが表示されます。
答え3
これはネットワーク設定に関係していることが確認できます。他のネットワークに接続したところ、問題なく動作するようです。
私が普段使用しているネットワークでは、2 つの異なるデバイス間の接続が許可されていません。相互に ping を実行すると、宛先ホストに到達できないというエラーが発生します。
ルーターの設定にアクセスして、そこで何かを変更する必要があると思いますか?