Төлем әдістері Abuse

2006 қатесі: MySQL сервері жойылды

09.03.2021, 22:01

MySQL Sever деп аталатын 2006 қатесі жойылды, сервер жұмыс істеп тұрғанына қарамастан қосылудан бас тартады. Қатенің пайда болуының үш ғана белгілі себебі бар. Бірінші себеп - сервердің шамадан тыс жүктелуі. Күту уақыты аяқталды. Екінші себеп - клиенттің тым ауырған пакетті жібергені. Үшіншіден, сервер толық іске қосылмаған. Әрі қарай, қатенің неліктен пайда болатынын және онымен қалай күресуге болатынын егжей-тегжейлі қарастырамыз.

Қатені қалай түзетуге болады

Әдетте қате дерекқорға PHP, консоль клиенті арқылы қосылу әрекеті кезінде немесе PhpMyAdmin пайдалану кезінде пайда болады:

PhpMyAdmin

Әр жағдайды бөлек қарастырайық.

Уақыт бітті

Мақаланың басында айтылғандай, мүмкін себептердің бірі күту уақыты болып табылады. Сервер шамадан тыс жүктелген және жүктемені көтере алмаған болуы мүмкін - барлық қосылымдарды өңдеу. Сервер сұрауларының аяқталуына қанша уақыт кететінін түсіну үшін кез келген консоль клиентін пайдалануға және серверге қосылуға болады. Егер сіз мұны істей алсаңыз, кез келген сұрауды орындаңыз. Сұрауларды өңдеуге тым ұзақ уақыт кетсе, арнайы MySQLTuner сценарийін пайдаланып MySQL-ті оңтайландыруға болады. Әдетте InnoDB қозғалтқыш пулының өлшемі innodb_buffer_pool_size параметрін орнату арқылы ұлғайтылады. Оңтайлы мән жоғарыдағы сценарий арқылы анықталады.

Егер ол 800 мегабайт болса (ол басқа өлшем болуы мүмкін), біз жазамыз:

 $ sudo vi /etc/mysql/my.cnf innodb_buffer_pool_size=800M

https://pq.hosting/help/myfiles/mysqlhasgoneavay-991x576.png

Мәселені шешудің тағы бір жолы бар. Ол үшін серверден жауап беру уақыты ұлғайтылады. Бұл тапсырманы орындау үшін wait_timeout параметрін өзгерту керек. Бұл серверден жауап күту қажет секундтармен берілген уақыт.

Мысалы:

 wait_timeout=500

wait_timeout параметрі

Өзгерістерді енгізген кезде серверді қайта іске қосуды ұмытпаңыз:

 $ 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

Енді қолданбаны инициализациялауды бастауға болады, дерекқор сервері оның дайын екендігі туралы хабарлағанша күтіңіз және оған қосыла аласыз.