
일부 데이터를 공유하기 위해 2개의 Raspberry Pi가 필요한 프로젝트를 진행 중입니다.
저는 MySQL 데이터베이스에 대해 약간의 경험이 있었기 때문에 MySQL 데이터베이스를 사용하는 것이 가장 편리할 것이라고 생각했습니다. Apache, MariaDB 및 MySQL 데이터베이스에 필요한 모든 도구를 설치했습니다. SD 카드 사본을 만들었습니다. 두 Raspberry Pi 모두에서 동일한 도구와 프로그램을 사용합니다. 즉, 두 Raspberry PI 머신 모두에서 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_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에 연결되어 있다는 점을 명심하세요.
보조 라즈베리 PI:
답변1
여기에는 Raspberry Pi와 관련된 것이 없다는 점을 지적하고 싶습니다. 두 대의 컴퓨터가 있고 그 중 하나는 데이터베이스 서버를 호스팅하고 다른 하나는 연결하려고 합니다. 다음은 MySQL과 그 복제본(예: Percona, MariaDB(사용할 가능성이 높음))과 완전히 관련됩니다.
해결 단계:
I. TCP/IP로 사용 가능한지 확인하십시오.
2nd-RPi$ telnet 192.168.61.170 3306
(내가 알기로는 이것은 데이터베이스를 호스팅하는 컴퓨터의 주소입니다). 성공적인 연결은 MySQL 서비스가 수신 중임을 의미하며 방화벽은 전혀 차단하지 않습니다.
연결할 수 없는 경우 첫 번째 RPi를 확인하세요.
- 수신 중인 경우
ss -lnpt
(또는 )은 연결하는 주소 또는 로컬 외부 주소의 TCP 포트netstat -lnpt
에서 수신 중인 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에 연결하고 테이블을 확인하세요 mysql.user
.
SELECT `Host`, `User`, `Password` FROM `mysql`.`user`;
(백틱이므로 이 경우 꼭 필요한 것은 아니지만 테이블 이름이나 필드 이름 또는 데이터베이스에 특수 기호가 있거나 일부 키워드와 충돌하는 경우 필요할 것이므로 사용하는 것이 좋은 습관입니다)
모든 사용자가 표시됩니다. 비밀번호는 역으로 뒤섞여 있습니다. 이는 정상입니다. 다른 호스트에서 허용된 사용자 레코드가 없는 경우 생성할 수 있으며, 위에서 보여드린 명령( %
호스트 이름 대신 사용)을 사용하여 생성할 수 있습니다.
추가 및 확장 문서는 MySQL 참조 매뉴얼 섹션에서 찾을 수 있습니다.액세스 제어 및 계정 관리.
답변2
아직 댓글을 달 수 없기 때문에 이것을 답변으로 게시합니다. 나는 당신이 홈 네트워크에 있고 일시적으로 라즈베리 연결을 끊을 여유가 있다고 가정하겠습니다.
No route to host
이는 귀하의 라즈베리가 다른 라즈베리를 찾을 수 없다는 것을 의미합니다. A) 대상 호스트를 사용할 수 없거나 연결되지 않았거나 B) 스위치 또는 라우터가 트래픽을 차단할 때 가장 많이 발생합니다. 서로 다른 워크스테이션이 서로 접촉하는 것을 허용하지 않는 것은 WIFI의 보안 기능일 수 있습니다. 이더넷을 통해 워크스테이션을 연결하는 경우 동일한 보호가 구성되지 않을 수 있습니다.
WIFI가 연결을 차단하는지 확인하는 빠르고 매우 더러운 방법은 다음과 같습니다.
- 한 라즈베리에서 다른 라즈베리로 또는 그 반대로 핑을 시도하려면
- 이더넷을 통해 두 라즈베리를 연결하려면 라즈베리에 대해 동일한 범위에 두 개의 고정 IP를 설정하고 핑을 시도한 다음 텔넷을 시도하십시오(이것은 테스트용일 뿐이므로 WIFI를 사용할 수 없습니다). 동시에)
둘 중 하나라도 작동한다면 문제는 WIFI에 있을 가능성이 높습니다. 그렇지 않은 경우 tcpdump를 사용하여 패킷이 클라이언트 라즈베리를 떠나거나 BDD 서버에 도달하는지 확인할 수 있습니다.
귀하의 경우 기본 tcpdump 명령 예는 네트워크에 연결된 인터페이스 이름을 tcpdump -i <connected_interface> host <other_raspberry_ip>
사용하는 것입니다( 인터페이스를 보려면 또는 실행). 두 라즈베리 모두에서 이 명령을 실행한 다음 ping 또는 telnet을 사용하여 출력을 확인할 수 있습니다. 두 라즈베리 모두에 패킷이 나타나는 것을 볼 수 있습니다.connected_interface
ifconfig
ip a
방화벽이 무언가를 차단하는 경우 /var/log/messages를 보면 해당 내용이 표시됩니다.
답변3
이것이 네트워크 설정과 관련이 있음을 확인할 수 있습니다. 다른 네트워크에 연결했는데 제대로 작동하는 것 같아요!
제가 주로 사용하는 네트워크는 서로 다른 두 장치 간의 연결을 허용하지 않습니다. 서로 ping하면 대상 호스트에 연결할 수 없음 오류가 발생합니다.
내 라우터 설정에 액세스하여 뭔가를 수정해야 한다고 생각합니까?