MySQL Server Has Gone Away - как пофиксить

Thank you for reading this post, don't forget to subscribe!

Ошиб­ка MySQL Server Has Gone Away (error 2006) может воз­ник­нуть в двух случаях.

Таймаут соединения

Наи­бо­лее рас­про­стра­нен­ная про­бле­ма: тай­маут соеди­не­ния, в резуль­та­те чего сер­вер его закры­ва­ет. Реше­ние весь­ма три­ви­аль­ное — уве­ли­че­ние лими­та вре­ме­ни wait_timeout в фай­ле кон­фи­гу­ра­ции my.cnf. Для это­го в Debian нуж­но выполнить:

# Откры­тие фай­ла настро­ек MySQL

Затем уста­но­вить тайм-аут ожидания:

# Вре­мя ожи­да­ния в секун­дах, мож­но уста­но­вить вплоть до 28800 с (8 часов)

Не забудь­те пере­за­гру­зить базу:

# Пере­за­груз­ка базы дан­ных MySQL

Ино­гда, при выпол­не­нии дли­тель­ных запла­ни­ро­ван­ных задач, так­же может появить­ся ошиб­ка MySQL Server Has Gone Away все из-за того же тай­мау­та соеди­не­ния. При этом лимит вре­ме­ни не полу­чит­ся суще­ствен­но уве­ли­чить (мак­си­мум до несколь­ких часов), так как это может при­ве­сти к запол­не­нию буфе­ра ожи­да­ю­щи­ми соединениями.

Поэто­му луч­ше про­ве­рить соеди­не­ние и, при необ­хо­ди­мо­сти, переподключиться.

# Под­клю­че­ние БД и пере­под­клю­че­ние при необходимости

Большой или некорректный пакет

Вто­рая рас­про­стра­нен­ная про­бле­ма: сер­вер полу­ча­ет боль­шой или некор­рект­ный пакет и откло­ня­ет его. В этом слу­чае сер­вер счи­та­ет, что про­бле­ма на сто­роне кли­ен­та и закры­ва­ет соеди­не­ние. Так что для реше­ния нуж­но уве­ли­чить лимит на мак­си­маль­ный раз­мер паке­та все в том же фай­ле конфигурации:

# Уве­ли­че­ние лими­та раз­ме­ра вхо­дя­ще­го паке­та, в МБ

Так­же не забудь­те пере­за­гру­зить базу данных.

 

После того, как устра­ни­те ошиб­ку MySQL Server Has Gone Away, поиг­рай­тесь с пара­мет­ра­ми wait_timeout и max_allowed_packet для полу­че­ния опти­маль­ных лимитов.