Көмек

Дерекқор ақауларын шешу

Бұл мақалада дерекқорыңыздың жұмысында туындауы мүмкін ақауларды қарастырып, оларды жою бойынша ұсыныстар береміз.

Мәселе: Дерекқордың қолжетімсіздігі

Егер дерекқордың қолжетімсіздігіне тап болсаңыз, мәселені диагностикалау және жою үшін осы нұсқауларды орындаңыз.

  1. MySQL қызметінің жұмыс істеп тұрғанын тексеріңіз:
service mysql status

Жұмыс істеп тұрған қызмет үшін шығыс мысалы келесідей:

Дерекқор ақауларын шешу

Егер шығыста қызметтің іске қосылғаны туралы ақпарат болмаса, бұл MySQL қызметінің іске қосылмағанын білдіреді. Бұл жағдайда оны келесі командамен іске қосып көріңіз:

service mysql start

Содан кейін сайтыңыздың қолжетімді екенін тексеріңіз.

Егер мәселе бәрібір шешілмесе, келесі кезеңге өтіңіз.

  1. Дискілік кеңістіктің күйін тексеріңіз.

Алдымен дискідегі жалпы және пайдаланылған көлемді білу үшін команданы орындаңыз:

df -h

Негізгі бөлімдегі бос кеңістікке назар аударыңыз. Егер ол таусылса, дискіні кеңейту немесе орын босату үшін қажетсіз файлдарды жою қажет. Дискілерді басқару және оларда орын босату үшін ncdu немесе du утилиталарын пайдалана аласыз.

Егер дискіде бос орын жеткілікті болса, бірақ ақаулар жалғаса берсе, inodes күйін тексеруге өтіңіз.

Егер бұл тапсырманы орындау қиын болса, біздің қолдау қызметімізге көмек сұрап еркін жүгіне аласыз.

Мәселе: Дерекқордағы зақымдалған кестелер (Table is marked as crashed)

Егер "Warning: Table ... is marked as crashed" түріндегі қатеге тап болсаңыз, кестелерді қалпына келтіру қажет.

Егер серверіңізде phpMyAdmin орнатылған болса, келесі әрекеттерді орындаңыз:

  1. phpMyAdmin интерфейсіне өтіп, сол жақтағы мәзірден қажетті дерекқорды таңдаңыз.
  2. Қалпына келтіру қажет кестелерді белгілеңіз (яғни атаулары қателерде көрсетілген кестелерді).
  3. Беттің төменгі жағында "Белгіленгендермен" (With selected), содан кейін "Қалпына келтіру" (Repair) тармағын таңдаңыз.

Кестелерді phpMyAdmin-сіз, серверге SSH арқылы қосылып та қалпына келтіре аласыз:

Бір кестені қалпына келтіру үшін келесі команданы пайдаланыңыз:

mysqlcheck -r база_атауы кесте_атауы -uroot -p

Дерекқордағы барлық кестені қалпына келтіру үшін келесі команданы орындаңыз:

mysqlcheck -r база_атауы -uroot -p

Сондай-ақ барлық дерекқордағы барлық кестені келесі командамен тексеруге болады:

mysqlcheck -r -A -uroot -p

Мәселе: 2006 қатесі - MySQL server has gone away

"MySQL server has gone away" қатесі сервердің байланысты үзгенін білдіреді. Бұл әдетте күту уақытының асып кетуінен немесе серверге тым үлкен деректер пакетінің келуінен болады.

Бұл мәселені шешу үшін MySQL конфигурация файлына өзгерістер енгізу қажет. Мұны серверге SSH арқылы қосылып немесе басқару панеліндегі веб-консольді пайдаланып жасай аласыз.

Конфигурация файлы әртүрлі жолдарда орналасуы мүмкін, мысалы:

/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf

Қажетті параметр қай файлда екенін білу үшін келесі команданы орындаңыз:

grep -Rl 'параметр_атауы' /etc/*

Мысалы:

grep -Rl 'wait_timeout' /etc/* 
grep -Rl 'max_allowed_packet' /etc/*

Бұл команда арқылы қажетті параметр көрсетілген файлдарды тауып, оның мәнін өзгерте аласыз.

Мәселе: Таймаут

Байланысты күту уақытын ұлғайту үшін wait_timeout параметріне өзгерістер енгізу қажет.

Конфигурация файлын редактор арқылы ашыңыз (файлға дұрыс жолды көрсетіңіз):

nano /etc/mysql/my.cnf

wait_timeout параметрінің мәнін жоғарырақ мәнге өзгертіңіз. Мән секундпен көрсетіледі, мысалы, күту уақытын 10 минутқа дейін ұлғайту үшін 600 мәнін орнатыңыз:

wait_timeout = 600

Өзгерістер енгізгеннен кейін MySQL қызметін қайта іске қосыңыз:

Debian/Ubuntu-да:

service mysql restart

CentOS-та:

service mysqld restart

Мәселе: Пакеттер өлшемі

Қажет болған жағдайда max_allowed_packet параметрін өзгертіп, пакеттердің ең үлкен рұқсат етілген өлшемін ұлғайтыңыз.

Конфигурация файлын ашыңыз (файлға дұрыс жолды көрсетіңіз):

nano /etc/mysql/my.cnf

max_allowed_packet параметрінің мәнін жоғарырақ мәнге өзгертіңіз (мән мегабайтпен көрсетіледі), мысалы:

max_allowed_packet = 64M

Содан кейін қызметті қайта іске қосыңыз:

Debian/Ubuntu-да:

service mysql restart

CentOS-та:

service mysqld restart

Мәселе: 1040 қатесі - Too many connections

"Too many connections" қатесінің пайда болуы дерекқорға қосылу лимитінің таусылғанын білдіреді. Оған баяу сұраулар немесе бір мезгілдегі қосылымдардың көп болуы себеп болуы мүмкін.

Бұл мәселені шешу үшін MySQL конфигурация файлындағы max_connections параметрін өзгертіп, қосылымдар лимитін ұлғайта аласыз.

Жоғарыда сипатталғандай my.cnf файлының орналасқан жерін табыңыз.

Файлды редакторда ашыңыз (дұрыс жолды көрсетіңіз):

nano /etc/mysql/my.cnf

Және max_connections параметрінің мәнін жоғарырақ мәнге өзгертіңіз, мысалы:

max_connections = 200

Өзгерістер енгізгеннен кейін қызметті қайта іске қосыңыз:

Debian/Ubuntu-да:

service mysql restart

CentOS-та:

service mysqld restart

Мәселе: 1292 қатесі - Incorrect date value

MySQL кестесіне күнді көрсетпей деректер қосқан кезде "ERROR 1292 (22007): Incorrect date value" қатесі туындаса, келесі өзгерістерді енгізу қажет:

1. /etc/mysql/my.cnf файлын ашыңыз:

nano /etc/mysql/my.cnf

2. sql-mode= деп басталатын жолдан келесі мәндерді жойыңыз:

NO_ZERO_IN_DATE
NO_ZERO_DATE
STRICT_ALL_TABLES

3. Осыдан кейін mysql-серверді қайта іске қосыңыз:

Debian/Ubuntu-да қайта іске қосу:

sudo service mysql restart

CentOS-та қайта іске қосу:

sudo service mysqld restart

Ескерту: Егер sql-mode= жолы жоқ болса, оны келесідей қоса аласыз:

  1. /etc/mysql/my.cnf файлында [mysqld] параметрінен кейін жол қосыңыз:
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  1. Осыдан кейін mysql-серверді қайта іске қосыңыз:
sudo service mysql restart

Сұрақтарыңыз бар болса, жазыңыз