MySQL Sever деп аталатын 2006 қатесі жойылды, сервер жұмыс істеп тұрғанына қарамастан қосылудан бас тартады. Қатенің пайда болуының үш ғана белгілі себебі бар. Бірінші себеп - сервердің шамадан тыс жүктелуі. Күту уақыты аяқталды. Екінші себеп - клиенттің тым ауырған пакетті жібергені. Үшіншіден, сервер толық іске қосылмаған. Әрі қарай, қатенің неліктен пайда болатынын және онымен қалай күресуге болатынын егжей-тегжейлі қарастырамыз.
Әдетте қате дерекқорға PHP, консоль клиенті арқылы қосылу әрекеті кезінде немесе PhpMyAdmin пайдалану кезінде пайда болады:
Әр жағдайды бөлек қарастырайық.
Мақаланың басында айтылғандай, мүмкін себептердің бірі күту уақыты болып табылады. Сервер шамадан тыс жүктелген және жүктемені көтере алмаған болуы мүмкін - барлық қосылымдарды өңдеу. Сервер сұрауларының аяқталуына қанша уақыт кететінін түсіну үшін кез келген консоль клиентін пайдалануға және серверге қосылуға болады. Егер сіз мұны істей алсаңыз, кез келген сұрауды орындаңыз. Сұрауларды өңдеуге тым ұзақ уақыт кетсе, арнайы MySQLTuner сценарийін пайдаланып MySQL-ті оңтайландыруға болады. Әдетте InnoDB қозғалтқыш пулының өлшемі 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
циклдерін пайдаланып MySQL-ге сұраулар жасамауыңыз керек.
Егер сіз MySQL немесе MariaDB жүйесін Docker жүйесінде орналастыруды шешсеңіз, ұқсас қатені кездестіруге дайын болыңыз. Контейнерді бастапқы инициализациялау бос уақытты қажет етеді. Контейнерді алдымен тоқтатып, іске қосу арқылы баптандыруды аяқтауға рұқсат бермесеңіз, дерекқор әрқашан осы қатені қайтарады. Шешім дерекқормен бірге контейнер деректерін толығымен жою болып табылады.
Бұл келесідей орындалады:
$ docker-compose down
немесе:
$ docker rm mysql-container
Әрі қарай, дұрыс емес инициализацияланған дерекқоры бар жадты (көлемді) жою керек. Бірақ алдымен барлық репозиторийлердің тізімін қараңыз:
$ docker volume ls
Содан кейін біз жоямыз:
$ docker volume rm volume_name
Енді қолданбаны инициализациялауды бастауға болады, дерекқор сервері оның дайын екендігі туралы хабарлағанша күтіңіз және оған қосыла аласыз.