[MYSQL] SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Ответить
[MYSQL] SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Переодически при коннекти к mysql php выдает ошибку: General error: 2006 MySQL server has gone away
С чем может быть связанно подобное поведение ?
General error: 2006 MySQL server has gone away может возникать по многим причинам: https://dev.mysql.com/doc/refman/5.5/en/gone-away.html
И по факту она означает "«ваш SQL-запрос не сработал, потому что соединение с базой данных было отключено из-за "

Основные причины и их решения:
1. Сервер действительно недоступен.
Мы можем легко проверить это, посмотрев время безотказной работы сервера и журнал ошибок сервера.
mysql -uroot -p -e "show global status like 'uptime';"

Также можно псомотреть лог:
tail /var/log/mysql/error.log
170804 12:02:22 [Note] Event Scheduler: Purging the queue. 0 events
170804 12:02:24  InnoDB: Starting shutdown...
170804 12:02:27  InnoDB: Shutdown completed; log sequence number 338 3872664693
170804 12:02:27 [Note] /usr/libexec/mysqld: Shutdown complete
170804 12:02:27 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
170804 12:02:28 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

2. Соединение разорвано по причине таймаута
mysql -uroot -p -e "show global variables like '%timeout';"
$ mysql -uroot -p -e "show global variables like '%timeout';"
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 30       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 28800    |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 28800    |
+----------------------------+----------+

Эти значения являются относительно нормальными значениями MySQL по умолчанию. Если, однако, у вас очень короткие таймауты, вы можете получить эту ошибку. Вот только один пример.

mysql> SET SESSION wait_timeout=5;

## Wait 10 seconds

mysql> SELECT NOW();
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    132361
Current database: *** NONE ***

+---------------------+
| NOW()               |
+---------------------+
| 2013-01-02 11:31:15 |
+---------------------+
1 row in set (0.00 sec)



3. Ваш оператор SQL был убит
Некоторые системы будут проактивно убивать SQL-запросы, которые слишком долго выполнялись. Вы можете легко проверить, может ли это быть проактивно, посмотрев, сколько команд KILL было выполнено.
$ mysql -uroot -p -e "show global status like 'com_kill'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_kill      | 0     |
+---------------+-------+
нет убитых SQL

4. Ваш SQL-запрос слишком велик. (очень распространненный)
значение по умолчанию
mysql> show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)


Вы можете увеличить, например, до 16M с помощью:

mysql> set global max_allowed_packet=1024*1024*16;
mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)

Меняем значение тут:
#my.cnf
[mysqld]
max_allowed_packet = 16M

max_allowed_packet — Максимальный размер пакета для передачи данных. Данные между клиентом и сервером передаются пакетами. В начале создается пакет длиной net_buffer_length затем, если размер данных больше, то размер пакета увеличивается до необходимого значения, при этом его длина не может превысить значение max_allowed_packet. Если используются поля BLOB большого размера, то рекомендуется увеличить значение этого параметра. В идеале нужно присвоить этой переменной значение размера самого большого BLOB поля
Услуги Системного Администратора - Работаю только с Юр. Лицами по договору обслуживания.
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
:) ;) :D 8) :( :| :cry: :evil: :o :oops: :{} :?: :!: :idea:
Защита от автоматических сообщений. Введите символы, изображенные на этой картинке в поле ввода &quote;Код подтверждения&quote;.