«Сервер MySQL пропал» при подключении к серверу с помощью PHP - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня странная проблема на моем сервере Ubuntu (18.04):

У меня запущены PHP (7.2.10) и MySQL (8.0.12).Когда я пытаюсь подключиться к базе данных MySQL со страницы PHP, я получаю сообщение об ошибке «Сервер MySQL исчез».В каждом поиске, который я сделал, все исправления относятся к появлению этой ошибки при отправке запроса.(Пока я даже не дохожу до этого.)

Файлы mysql.err и mysql.log либо пустые, либо имеют несвязанные предупреждения (без ошибок).Я увеличил время ожидания и max_allowed_packet безрезультатно.Кроме того, я могу удаленно подключаться к базе данных с другими программами, поэтому я знаю, что сервер отвечает на запросы.

Я установил в MySQL разрешение на подключения от [User] @% (я знаю, это плохая идея;Я верну его обратно, как только уйду от этой проблемы.)

Я использую того же пользователя, которого могу использовать для удаленного доступа к базе данных.

Есть идеи?

Соответствующая часть сценария (хотя, на данный момент, я> 90% уверен, что проблема не в самом сценарии)

<?php

$conn = new mysqli($servername, $user, $password, $DB, $port);

if ($conn->connect_error)//Test connection
{ //On fail, send an alert and populate manually
  echo "<script>alert('Connection failed: $conn->connect_error! $conn->host_info');</script>\n";/*populate manually*/
}
else //run query; it never gets here.
?>

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я попробовал ваш код, и он, кажется, работает с WAMP (возможно, проблема с конфигурацией на вашей стороне).

Однако есть еще один случай, когда соединение может быть потеряно.Это происходит с подготовленными заявлениями.Если вы потеряете или замените ссылку на соединение ($ conn в вашем случае) и выполните инструкцию после, вы получите «Ошибка MySQL исчезла».

Пример фрагмента ниже:

<?php

$conn = new mysqli($servername, $user, $password, $DB, $port);

if ($conn->connect_error)
{
    echo "<script>alert('Connection failed: $conn->connect_error! $conn->host_info');</script>\n";/*populate manually*/
}
else {
    //Reference lost when replacing the connection instance with the statement
    $conn = $conn->prepare("SELECT * FROM $someTable");
    $conn->execute();

    echo $conn->error;
}
?>

В этом случае ошибка не будет возникать во время соединения, а вместо этого во время выполнения запроса.

В противном случае это, скорее всего, ошибка конфигурации, в этом случае вы можете попробовать переустановить конфигурацию MySQL по умолчанию.

0 голосов
/ 18 октября 2018

Я думаю, вы можете сначала прочитать эту страницу.

https://dev.mysql.com/doc/refman/8.0/en/gone-away.html

Существует два наиболее вероятных варианта:

  1. По умолчанию сервер закрывает соединение через восемь часов, если ничего не произошло.Вы можете изменить ограничение по времени, установив переменную wait_timeout при запуске mysqld.См. Раздел 5.1.7, «Системные переменные сервера».

  2. Если у вас есть сценарий, вам просто нужно снова выполнить запрос, чтобы клиент выполнил автоматическое переподключение.Это предполагает, что у вас включено автоматическое переподключение в клиенте (по умолчанию для клиента командной строки mysql).

Надеюсь, что это может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...