Переодически при коннекти к mysql php выдает ошибку: General error: 2006 MySQL server has gone away
С чем может быть связанно подобное поведение ?
С чем может быть связанно подобное поведение ?
04.08.2017 15:56:32
Переодически при коннекти к mysql php выдает ошибку: General error: 2006 MySQL server has gone away
С чем может быть связанно подобное поведение ? |
|
|
04.08.2017 16:28:22
General error: 2006 MySQL server has gone away может возникать по многим причинам:
И по факту она означает "«ваш 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 поля |
||||
|
||||