2 Raspberry PI, подключающиеся к одной и той же базе данных MYSQL в одной и той же сети

2 Raspberry PI, подключающиеся к одной и той же базе данных MYSQL в одной и той же сети

Я работаю над проектом, для которого требуются два Raspberry Pi для обмена данными.

Я решил, что мне будет удобнее всего использовать базу данных MySQL, так как у меня был небольшой опыт в этом. Я установил Apache, MariaDB и все необходимые инструменты для базы данных MySQL; создал копию SD-карты; и я использую одни и те же инструменты и программы на обоих Raspberry Pi, что означает, что на обеих машинах Raspberry PI я могу получить доступ к отдельным базам данных MySQL с помощью http://localhost/phpmyadmin.

Теперь я хочу, чтобы на моем основном Raspberry Pi была база данных, http://localhost/phpmyadminи я хочу получить доступ к этой базе данных на моем вторичном Pi. Поскольку я знаю IP-адрес моего основного Raspberry Pi, вторичный Raspberry Pi должен иметь возможность получить доступ к этой базе данных, подключившись к PHPMyAdmin из браузера следующим образом: http://192.168.61.170/phpmyadmin(192.168.61.170 — это IP моего основного Raspberry PI, к которому я хочу получить доступ на моем вторичном PI-компьютере). Однако я получаю ошибку «Сайт не может быть доступен».

Немного почитав, я понял, что мне, возможно, нужно изменить bind_addressконфигурацию MySQL. Я сделал это на своем основном Raspberry PI и изменил ее на 0.0.0.0.

Я подтвердил это командой:

sudo netstat -tlnpu | grep mysql

введите описание изображения здесь

Однако я все еще не могу попасть на страницу PHPMyAdmin, когда захожу на мой вторичный Raspberry Pi с IP-адресом. Я также где-то читал ветку, в которой упоминается какая-то проблема с брандмауэром, блокирующим порт 3306.

Я выполнил эту команду:

firewall-cmd --get-active-zones

И похоже, что у меня даже не установлен брандмауэр, потому что в выводе написано:

firewall-cmd: command not found

Так что в моем случае проблем с брандмауэром быть не должно.

Может ли кто-нибудь посоветовать мне другие методы отладки/решения этой проблемы, чтобы иметь возможность подключиться к MySQL на моем вторичном Pi?

Имейте в виду, что оба устройства Raspberry PI подключены к одному и тому же WiFi.

Вторичный Raspberry PI:

введите описание изображения здесь

решение1

Хочу отметить, что здесь нет ничего специфического для Raspberry Pi. У вас просто есть два компьютера, на одном из которых размещен сервер базы данных, к которому другой хочет подключиться. Следующее полностью относится к MySQL, а также к его клонам, т. е. Percona, MariaDB (тот, который вы, вероятно, используете).

Шаги для решения:

I. Проверьте, доступен ли он по TCP/IP:

2nd-RPi$ telnet 192.168.61.170 3306

(насколько я понимаю, это адрес компьютера, на котором размещена база данных). Успешное подключение означает, что служба MySQL прослушивает, брандмауэр вообще ничего не блокирует.

Если не удаётся подключиться, проверьте на 1-м RPi:

  1. если он прослушивает, 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))
  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

Размещаю это как ответ, так как пока не могу комментировать. Я предполагаю, что вы используете домашнюю сеть и можете позволить себе временно отключить свои Raspberry.

No route to hostозначает, что ваш Raspberry не может найти другой. Я вижу, что это происходит чаще всего, когда A) целевой хост недоступен/не подключен или B) коммутатор или маршрутизатор блокирует трафик. Это может быть функцией безопасности вашего WIFI, которая не позволяет разным рабочим станциям связываться друг с другом. Если вы подключаете свои рабочие станции через Ethernet, та же защита может быть не настроена.

Быстрый и очень грязный способ проверить, блокирует ли ваш WIFI соединение:

  1. Попробовать пинговать с одного raspberry на другой и наоборот
  2. Чтобы попытаться подключить оба Raspberry через Ethernet, установите два статических IP-адреса в одном диапазоне для Raspberry и попробуйте выполнить ping, а затем попробуйте использовать Telnet (обратите внимание, что это только для тестирования, так как вы не сможете использовать WIFI одновременно).

Если что-то из этого работает, проблема, вероятно, в вашем WIFI. Если нет, вы можете попробовать использовать tcpdump, чтобы увидеть, покидают ли пакеты ваш клиентский Raspberry и/или достигают вашего BDD-сервера:

Базовый пример команды tcpdump в вашем случае — это tcpdump -i <connected_interface> host <other_raspberry_ip>, с connected_interfaceименем вашего сетевого интерфейса (запустите ifconfigили , ip aчтобы увидеть ваши интерфейсы). Вы можете запустить эту команду на обоих raspberry, затем использовать ping или telnet и посмотреть на их вывод. Вы должны увидеть, что пакеты появляются на обоих raspberry.

Если брандмауэр что-то блокирует, это должно быть видно в /var/log/messages.

решение3

Я могу подтвердить, что это как-то связано с настройками сети. Я подключился к другой сети, и она, кажется, работает нормально!

Сеть, которую я обычно использую, не допускает соединения между двумя отдельными устройствами. Пинг друг друга приводит к ошибке Destination host unreachable.

Полагаю, мне нужно будет зайти в настройки маршрутизатора и что-то там изменить?

Связанный контент