PHP не может подключиться к MySQL в пользовательском образе S2I на основе Ubuntu

Играю с Openshift origin 3.9 на своих пользовательских серверах. До сих пор это был приятный опыт. Я создавал пользовательский образ s2i на основе Ubuntu для своего стека LEMP. .

Я не могу подключиться к базе данных MySQL. Я всегда получаю сообщение об ошибке:

Не удалось подключиться к MySQL: (2002) Нет такого файла или каталога

Вот мой PHP-код:

$mysql_database = getenv("MYSQL_DATABASE");
$mysql_server_name =getenv("MYSQL_HOST");
$mysql_username = getenv("MYSQL_USER");
$mysql_password = getenv("MYSQL_PASSWORD");
$mysql_port = getenv("MYSQL_PORT");
$mysqli = new mysqli($mysql_server_name, $mysql_username, $mysql_password, $mysql_database, $mysql_port);
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    die();
}

Некоторые наблюдения:

Я могу подключиться из клиента MySQL CLI изнутри модуля.

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

То же приложение/код отлично работает с официальным образом openshift PHP s2i.

Я что-то упустил в своем s2i?


person Badri    schedule 04.08.2018    source источник
comment
Какая переменная среды MYSQL_HOST установлена ​​в конфигурации развертывания для вашего внешнего интерфейса? Как называется развертывание MySQL или, точнее, его служебный объект?   -  person Graham Dumpleton    schedule 05.08.2018


Ответы (1)


Проверьте свой phpinfo() и найдите расширение MySQLi. Если вы не можете найти, это означает, что у вас еще не установлено расширение, и его необходимо установить.

попробуй установить с терминала

(Ubuntu/Mint) $ sudo apt-get install php(version)-mysql

замените (версия) на любой номер вашей версии php. Например, php7.0/php7.1 и т.д.

Чтобы проверить phpinfo(), создайте файл phpinfo.php, к которому вы можете получить доступ по URL-адресу с содержимым

<?php
phpinfo()

Если у вас есть все, но вы все еще не можете подключиться? Попробуйте проверить путь к файлу mysql.sock.

Откройте файл php.ini и найдите эту строку:

mysql.default_socket

И сделайте это (узнайте, где находится ваш mysql.sock)

mysql.default_socket = /путь/к/mysql.sock

person Gabriel    schedule 04.08.2018
comment
привет, да, у меня установлено расширение mysql. Вы можете проверить Dockerfile соответствующего образа. - person Badri; 04.08.2018
comment
Доступ к MySQL из терминала и доступ из PHP — это совершенно разные истории. Из вашего изображения все, что я могу найти, это то, что вы используете терминал для доступа к MySQL через клиент MySQL. Вы поймете разницу, если посмотрите отчет phpinfo(). - person Gabriel; 04.08.2018
comment
Верно :) вот дамп phpinfo для стека Ubuntu (не работает) ubuntu-lemp.lakshminp.com/ info.php и для стека Centos (работает) centos-lemp.lakshminp.com/ info.php - person Badri; 04.08.2018
comment
отредактируйте мой ответ, вы можете проверить, что у mysql.sock однажды была такая же проблема. - person Gabriel; 04.08.2018
comment
да, это я тоже проверил. и mysqli.default_socket, и pdo_mysql.default_socket указывают на /var/lib/mysql/mysql.sock. - person Badri; 04.08.2018
comment
В OpenShift база данных MySQL будет находиться в совершенно другом модуле, поэтому к ней нельзя будет получить доступ через локальный сокет UNIX, вы должны использовать имя хоста: порт для доступа к ней, поскольку модуль отображается как другой хост. - person Graham Dumpleton; 05.08.2018