Подключение к контейнеру MySQL в том же модуле

Добрый день,

Я использую Kubernetes для запуска контейнеров на движке контейнеров Google.

Идея состоит в том, чтобы запустить два контейнера в капсуле. В одном контейнере используется изображение docker mysql, в другом — php, laravel, nginx и composer.

На местном уровне это работает. Идея заключается в том, что php может подключаться к базе данных на localhost, и это должно работать, если оба контейнера находятся в одном модуле. Однако, когда модуль запущен, мы видим следующее сообщение в журнале:

SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Разница лишь в том, что при локальном тестировании я меняю localhost на внутренний док-ip.

Спасибо и хорошего дня

4

Решение

В Unix программы MySQL обрабатывают имя хоста localhost специально, что, вероятно, отличается от того, что вы ожидаете по сравнению с другими сетевыми программами. Для подключения к localhost программы MySQL пытаются подключиться к локальному серверу с помощью файла сокета Unix. Это происходит, даже если --port или же -P опция дается для указания номера порта. Чтобы убедиться, что клиент устанавливает соединение TCP / IP с локальным сервером, используйте --host или же -h указать значение имени хоста 127.0.0.1или IP-адрес или имя локального сервера. Вы также можете указать протокол соединения явно, даже для localhost, используя --protocol=TCP вариант. Например:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

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

Другое решение использует Кубернетес Том абстракция для разделения пути между контейнерами. редактировать /etc/mysql/my.cnf на изображениях и изменениях обоих контейнеров socket расположение сервера и клиента MySQL для указания общего каталога или диска.

4

Другие решения

MySQL предварительно настроен для поддержки только именованных каналов на локальном хосте, если вы собираетесь подключиться к нему с другой логической машины, вам нужно найти следующую строку в вашем файле my.cnf …

#bind-address = 127.0.0.1

и заменить его на …

bind-address = {your network ip here}

После того, как вы включили адрес привязки, перезапустите сервер MySQL, проверьте журнал ошибок, чтобы убедиться в отсутствии исключений при привязке адреса, а затем войдите в систему как пользователь root и создайте новую учетную запись пользователя, присоединенную к тому IP-адресу, который вы затем сможете использовать для доступа MySQL с любой другой логической машины, если вы подключаетесь к ней с помощью IP-адреса, определенного вами в my.cnf.

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

0

По вопросам рекламы [email protected]