Рассмотрим, как исправить ошибку MySQL server has gone away (error 2006), которая появляется при обращении к сервису MySQL.
Наиболее распространение причины ошибки MySQL server has gone away:
- Слишком большой размер пакета в запросе к MySQL (по умолчанию максимальный размер — 16 Мб);
- Закончилась свободная оперативная память (RAM) на сервере MySQL (проверить свободную память в Linux можно с помощью команды free –h)
- Неактивное соединение между вашим приложением и MySQL (по умолчанию сессия разрывается через 8 часов).
General error: 2006 MySQL server has gone away
Error Code: 2013. Lost connection to MySQL server during query
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Чтобы увеличить таймаут для подключений к MySQL, нужно добавить следующие опции в конфигурационный файл mysqld.cnf:
sudo nano /etc/mysql/my.cnf
Найдите секцию [mysqld] и увеличьте таймаут до 24 часов:
wait_timeout = 86400 interactive_timeout = 86400
Если вы загружаете в MySQL большие файлы или BLOB объекты более 16 Мб, то MySQL с настройками по-умолчанию также может вернуть ошибку MySQL server has gone away. Нужно увеличить максимальный размер пакета в my.cnf.
Для этого в секции [mysqld] увеличьте значение параметра max_allowed_packet со стандартного 16M до 128MB:
max_allowed_packet = 128MB
После внесения изменений в файл mysqld.cnf нужно перезапустить сервис MySQL:
- В CentOS/RHEL:
sudo systemctl restart mysqld
- В Ubuntu:
sudo systemctl restart mysql.service
Если вы подключаетесь к MySQL из PHP, проверьте что значения таймаутов в php.ini больше, чем в MySQL
mysql.connect_timeout=86400 mysql.allow_persistent=1