Грешка 2006 под називом МиСКЛ Север је нестала значи да сервер одбија да се повеже иако ради. Постоје само три позната разлога зашто се грешка појављује. Први разлог је тај што је сервер преоптерећен. Време чекања је истекло. Други разлог је тај што је клијент послао пакет који је био превише болестан. Треће, сервер није у потпуности иницијализован. Затим ћемо детаљно размотрити зашто се грешка појављује и како се носити са њом.
Обично се грешка појављује када покушавате да се повежете са базом података помоћу ПХП-а, клијента конзоле или када користите ПхпМиАдмин:
Погледајмо даље сваку ситуацију посебно.
Као што је поменуто на почетку чланка, један од могућих разлога је временско ограничење. Можда је сервер био преоптерећен и не може да се носи са оптерећењем обраде свих веза. Да бисте разумели колико дуго је потребно да се захтеви сервера заврше, можете користити било који клијент конзоле и повезати се са сервером. Ако успете да то урадите, испуните било који захтев. Ако је потребно предуго за обраду упита, можете оптимизовати МиСКЛ помоћу посебне МиСКЛТунер скрипте. Обично се величина групе ИнноДБ мотора повећава постављањем параметра innodb_buffer_pool_size
. Оптимална вредност се одређује коришћењем горње скрипте.
Ако је 800 мегабајта (можда је другачија величина), пишемо:
$ sudo vi /etc/mysql/my.cnf innodb_buffer_pool_size=800M
Постоји још један начин да се реши проблем. Да бисте то урадили, време одговора са сервера се повећава. Да бисте извршили овај задатак, морате променити параметар wait_timeout
. Ово је време у секундама током којег треба да сачекате одговор од сервера.
на пример:
wait_timeout=500
Када правите измене, не заборавите да поново покренете сервер:
$ sudo systemctl restart mysql
или:
$ sudo systemctl restart mariadb
Када корисников клијент креира превише пакета, сервер ће избацити ову тачну грешку. Доступна величина пакета (максимална вредност) може се повећати коришћењем параметра max_allowed_packet
.
на пример:
$ sudo vi /etc/mysql/my.cnf max_allowed_packet=128M
Посебно обратите пажњу на клијента, јер ако шаље много захтева, онда очигледно нешто радите погрешно. У најмању руку, не би требало да генеришете упите за МиСКЛ користећи for
петље.
Ако одлучите да примените МиСКЛ или МариаДБ у Доцкер-у, будите спремни да наиђете на сличну грешку. Иницијална иницијализација контејнера захтева мало више слободног времена. Ако не дозволите контејнеру да заврши иницијализацију тако што ћете га прво зауставити и покренути, база података ће увек враћати ову грешку. Решење је потпуно брисање података контејнера са базом података.
Ово се ради овако:
$ docker-compose down
или:
$ docker rm mysql-container
Затим морате да избришете складиште (волумен) са погрешно иницијализованом базом података. Али прво погледајте листу свих спремишта:
$ docker volume ls
Затим бришемо:
$ docker volume rm volume_name
Сада можете да почнете да иницијализујете апликацију, само сачекајте да сервер базе података пријави да је спремна и можете се повезати са њом.