Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Другие случаи SQL ошибок 9. Исчезновение сервера.MySQL server has gone away кратко

Лекция



Привет, Вы узнаете о том , что такое sql ошибки, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое sql ошибки, исчезновение сервера, mysql server has gone away , настоятельно рекомендую прочитать все из категории Методы выявления ошибок в SQL приложении.

Часто это выглядит так:

$php phpconf2009_3.php
string(26) "MySQL server has gone away"

Код:

$cat phpconf2009_3.php
mysql_connect('127.0.0.1:3351', 'root', '');
mysql_select_db('test');
mysql_query('set wait_timeout=1');
$query = 'SELECT 1';
sleep(3);
$result = mysql_query($query);
if (0 != mysql_errno())
var_dump(mysql_error());
else
while ($row = mysql_fetch_row($result))
var_dump($row);
mysql_close();
?>

Перед тем как указать на причину возникновения ошибки мне бы хотелось обратить ваше внимание на несколько системных переменных MySQL сервера. Это переменные, отвечающие за timeout:

mysql> show variables like '%timeout%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 10 |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| wait_timeout | 28800 |
+----------------------------+-------+

Ниже приведены их описания:

connect_timeout

Сколько ждать ответа сервера перед тем как выдать ошибку о том, что сервер не отвечает.

interactive_timeout

Сколько ждать активности от интерактивного клиента перед тем как разорвать соединение.

wait_timeout

Сколько ждать активности от любого клиента перед тем как разорвать соединение. Об этом говорит сайт https://intellect.icu . Если клиент интерактивный и значение interactive_timeout отличается от wait_timeout, то будет использовано значение interactive_timeout.

net_read_timeout

Сколько времени MySQL сервер будет ждать ответа от клиента осуществляющего чтение. Например, клиент послал запрос SELECT и читает ответ сервера.

net_write_timeout

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

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

mysql_query('set wait_timeout=1');

установленный wait_timeout.

sleep(3);

время ожидания: 3>1, поэтому не удивительно, что мы получили ошибку.

Естественно sleep(3) был добавлен только для наглядности. В случае реального приложения следует обратить внимания на места, где такая задержка может быть вызвана в том числе кодом без использования sleep и подобных функций.

Также проверяйте другие timeout-ы в случае аналогичных ошибок.

Прием №16: проверяйте значение wait_timeout и других timeout-ов, если вы встречаете ошибку "MySQL server has gone away"

Также я хотела бы обратить ваше внимание на то, что вы не всегда получите сообщение "MySQL server has gone away" в случае слишком маленького timeout. Это также может быть сообщение «Lost connection to MySQL server at 'reading authorization packet'». Чаще всего такое сообщение говорит о проблеме с connect_timeout.

Для примера я не смогла найти сети с достаточными для повторения проблемы перебоями, поэтому применила отладчик.

Запускаем интерпретатор PHP под отладчиком gdb:

$gdb php

Устанавливаем breakpoint в клиентской функции MySQL C API:

(gdb) b wait_for_data
Breakpoint 1 at 0x4337a: file client.c, line 190.

Передаем имя файла с PHP скриптом интерпретатору:

(gdb) set args phpconf2009_3.php

Запускаем программу:

(gdb) run
Starting program: /usr/local/bin/php phpconf2009_3.php
Reading symbols for shared libraries .+.................................................................++.++ done
Breakpoint 1 at 0x204e435: file client.c, line 1861.
Reading symbols for shared libraries . done
Breakpoint 1, wait_for_data (fd=6, timeout=60) at client.c:195
195 ufds.fd= fd; client.c:1861
(gdb)

Когда интерпретатор останавливается ждем 11 секунд, что на 1 секунду больше предустановленного значения connect_timeout, затем вводим команду с (продолжить).

(gdb) c
Continuing.
PHP Warning: mysql_connect(): Lost connection to MySQL server at 'reading authorization packet', system error: 0 in /Users/apple/Documents/www_project/MySQL/Conferences/phpconf2009_3.php on line 2

Warning: mysql_connect(): Lost connection to MySQL server at 'reading authorization packet', system error: 0 in /Users/apple/Documents/www_project/MySQL/Conferences/phpconf2009_3.php on line 2

В результате иы получили ошибку «Lost connection to MySQL server at 'reading authorization packet'», что говорит о слишком маленьком connect_timeout

Что делать?

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

Поэтому после того как вы проверили помогает ли увеличение timeout, попытайтесь найти и устранить реальную причину такого поведения, если это возможно.

Не увеличивайте connect_timeout без необходимости: никому не понравится ждать слишком долго!

Прием №17: проверяйте значение connect_timeout в случае ошибки «Lost connection to MySQL server at 'reading authorization packet'»

Вау!! 😲 Ты еще не читал? Это зря!

В заключение, эта статья об sql ошибки подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое sql ошибки, исчезновение сервера, mysql server has gone away и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Методы выявления ошибок в SQL приложении

Из статьи мы узнали кратко, но содержательно про sql ошибки
создано: 2016-03-02
обновлено: 2023-06-30
96



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - Методы выявления ошибок в SQL приложении

Термины: Базы данных - Методы выявления ошибок в SQL приложении