
Estoy trabajando en un proyecto que requiere 2 Raspberry Pis para compartir algunos datos.
Pensé que sería más conveniente para mí usar la base de datos MySQL ya que tenía un poco de experiencia en eso. He instalado Apache, MariaDB y todas las herramientas necesarias para la base de datos MySQL; creó una copia de la tarjeta SD; y uso las mismas herramientas y programas en ambas Raspberry Pis, lo que significa que en ambas máquinas Raspberry PI puedo acceder a bases de datos MySQL separadas usando http://localhost/phpmyadmin
.
Ahora, quiero que mi Raspberry Pi principal tenga su base de datos activada http://localhost/phpmyadmin
y quiero acceder a esa base de datos en mi Pi secundaria. Como conozco la dirección IP de mi Raspberry Pi principal, la Raspberry Pi secundaria debería poder acceder a esa base de datos conectándose a PHPMyAdmin desde el navegador de la siguiente manera:
http://192.168.61.170/phpmyadmin
(192.168.61.170 es la IP de mi Raspberry PI principal a la que quiero llegar en mi máquina PI secundaria). Sin embargo, aparece el error "No se puede acceder al sitio".
Después de leer un poco, me di cuenta de que es posible que necesite cambiar la bind_address
configuración de MySQL. Lo hice en mi Raspberry PI principal y lo cambié a 0.0.0.0
.
Lo he confirmado con el comando:
sudo netstat -tlnpu | grep mysql
ingrese la descripción de la imagen aquí
Sin embargo, todavía no puedo acceder a la página PHPMyAdmin cuando la accedo en mi Raspberry Pi secundaria con la dirección IP. También leí un hilo en alguna parte que menciona algún problema con el firewall que bloquea el puerto 3306.
He ejecutado este comando:
firewall-cmd --get-active-zones
Y parece que ni siquiera tengo un firewall instalado porque el resultado dice:
firewall-cmd: command not found
Entonces, en mi caso, no debería haber ningún problema con el firewall.
¿Alguien puede aconsejarme sobre otros métodos sobre cómo depurar/resolver este problema para poder conectarme a MySQL en mi Pi secundario?
Tenga en cuenta que ambas máquinas Raspberry PI están conectadas al mismo WiFi.
Frambuesa PI secundaria:
Respuesta1
Quiero señalar que aquí no hay nada específico de Raspberry Pi. Sólo tiene dos computadoras, una de las cuales aloja un servidor de base de datos y la otra quiere conectarse. Lo siguiente es completamente relevante para MySQL así como para sus clones, es decir, Percona, MariaDB (el que probablemente esté usando).
Pasos para resolver:
I. Comprobar si está disponible por TCP/IP:
2nd-RPi$ telnet 192.168.61.170 3306
(Según tengo entendido, esta es la dirección de la computadora que aloja una base de datos). Una conexión exitosa significa que el servicio MySQL está escuchando, el firewall no se bloquea en absoluto.
Si no puede conectarse, verifique el primer RPi:
- si está escuchando,
ss -lnpt
(onetstat -lnpt
) debe mostrar mysqld escuchando en el puerto TCP3306
en la dirección o0.0.0.0
dirección externa local a la que se conecta, como .::
*
192.168.61.170
LISTEN 0 70 *:3306 *:* users:(("mysqld",pid=505,fd=32))
- si el firewall permite la conexión. Este es un tema bastante largo en general, a menudo recomiendo publicar
iptables-save
y leer su resultado completo, que es una configuración de firewall completa. Siento que la configuración del firewall no es un tema principal para esta respuesta, por lo que si ese es un problema, será mejor que explore otras preguntas; ese tema está muy bien cubierto.
II. Ahora debe tener un usuario de MySQL al que se le permita el acceso desde otros hosts.
En MySQL, los usuarios no sólo tienen un nombre y una contraseña; también tienen un host desde el cual se permite la conexión. Cuando agregas un usuario, por ejemplo, con GRANT
comando, también configuras eso:
`GRANT ALL PRIVILEGES ON `mydatabase`.* TO 'username'@'hostname' IDENTIFIED BY 'password';
El nombre de host puede ser un signo de porcentaje %
, que es un comodín en MySQL, es decir, debería permitir una conexión desde "cualquier host".
Para verificar si su usuario tiene la capacidad de conectarse desde otros hosts, conéctese a su MySQL desde donde funciona y verifique una tabla mysql.user
:
SELECT `Host`, `User`, `Password` FROM `mysql`.`user`;
(esas son comillas invertidas, no son estrictamente necesarias en este caso, pero si el nombre de la tabla o el nombre del campo o la base de datos tiene algunos símbolos especiales o entran en conflicto con algunas palabras clave, serán necesarios, por lo que es un buen hábito usarlos)
Mostrará todos sus usuarios. Las contraseñas están codificadas de forma inversa, eso es normal. Si no hay ningún registro de usuario permitido desde otro host, puede crearlo, puede crearlo con el comando que mostré arriba (usar %
en lugar del nombre de host).
Puede encontrar documentación adicional y ampliada en el Manual de referencia de MySQL, secciónControl de acceso y gestión de cuentas.
Respuesta2
Publicar esto como respuesta ya que todavía no puedo comentar. Voy a suponer que estás en una red doméstica y puedes permitirte desconectar temporalmente tus Raspberrys.
No route to host
significa que tu frambuesa no puede encontrar la otra. Veo que esto sucede con mayor frecuencia cuando A) el host de destino no está disponible/no está conectado o B) el conmutador o enrutador bloquea el tráfico. Podría ser una característica de seguridad de su WIFI no permitir que diferentes estaciones de trabajo se comuniquen entre sí. Si conecta sus estaciones de trabajo a través de Ethernet, es posible que no se configure la misma protección.
Una forma rápida y muy sucia de comprobar si tu WIFI bloquea la conexión sería
- Para intentar hacer ping de una frambuesa a otra y viceversa
- Para intentar conectar ambas Raspberry a través de Ethernet, configure dos IP estáticas en el mismo rango para las Raspberry e intente hacer ping, luego intente hacer telnet (tenga en cuenta que esto es solo para pruebas, ya que no podrá usar el WIFI). al mismo tiempo)
Si alguno de ellos funciona, el problema probablemente esté en su WIFI. De lo contrario, puede intentar usar tcpdump para ver si los paquetes salen de su cliente raspberry y/o llegan a su servidor BDD:
Un ejemplo básico del comando tcpdump en su caso es tcpdump -i <connected_interface> host <other_raspberry_ip>
, con connected_interface
el nombre de su interfaz conectada a la red (ejecute ifconfig
o ip a
para ver sus interfaces). Puede ejecutar este comando en ambas Raspberry, luego usar ping o telnet y observar sus resultados. Deberías ver aparecer paquetes en ambas frambuesas.
Si un firewall bloquea algo, buscar en /var/log/messages debería mostrarlo.
Respuesta3
Puedo confirmar que esto tiene algo que ver con la configuración de red. ¡Me he conectado a otra red y parece funcionar bien!
La red que uso habitualmente no permite conexiones entre dos dispositivos separados. Hacer ping entre sí genera un error de host de destino inalcanzable.
¿Supongo que necesitaría acceder a la configuración de mi enrutador y modificar algo allí?