Vidokezo Muhimu vya Kutatua Makosa ya Kawaida katika MySQL


MySQL ni mfumo wa usimamizi wa hifadhidata wa uhusiano wa chanzo huria unaotumika sana (RDMS) unaomilikiwa na Oracle. Kwa miaka mingi imekuwa chaguo-msingi kwa programu zinazotegemea wavuti na bado inabaki kuwa maarufu kwa kulinganisha na injini zingine za hifadhidata.

MySQL iliundwa na kuboreshwa kwa programu za wavuti - inaunda sehemu muhimu ya programu kuu za wavuti kama vile Facebook, Twitter, Wikipedia, YouTube, na zingine nyingi.

Je, tovuti au programu yako ya wavuti inaendeshwa na MySQL? Katika makala hii ya kina, tutaelezea jinsi ya kutatua matatizo na makosa ya kawaida katika seva ya database ya MySQL. Tutaelezea jinsi ya kuamua sababu za matatizo na nini cha kufanya ili kutatua.

1. Haiwezi Kuunganishwa kwenye Seva ya Ndani ya MySQL

Mojawapo ya hitilafu za kawaida za muunganisho wa seva kwenye MySQL ni \ERROR 2002 (HY000): Haiwezi kuunganisha kwenye seva ya karibu ya MySQL kupitia soketi ‘/var/run/mysqld/mysqld.sock’ (2)”.

Hitilafu hii inaonyesha kwamba hakuna seva ya MySQL (mysqld) inayoendesha kwenye mfumo wa seva pangishi au kwamba umebainisha jina lisilo sahihi la faili ya tundu la Unix au mlango wa TCP/IP unapojaribu kuunganisha kwenye seva.

Hakikisha kuwa seva inafanya kazi kwa kuangalia mchakato unaoitwa mysqld kwenye seva pangishi ya hifadhidata yako kwa kutumia amri ya grep pamoja kama inavyoonyeshwa.

$ ps xa | grep mysqld | grep -v mysqld

Ikiwa amri zilizo hapo juu hazionyeshi matokeo, basi seva ya hifadhidata haifanyi kazi. Kwa hivyo mteja hawezi kuunganishwa nayo. Ili kuanza seva, endesha amri ifuatayo ya systemctl.

$ sudo systemctl start mysql        #Debian/Ubuntu
$ sudo systemctl start mysqld       #RHEL/CentOS/Fedora

Ili kuthibitisha hali ya huduma ya MySQL, tumia amri ifuatayo.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Kutoka kwa matokeo ya amri hapo juu, huduma ya MySQL imeshindwa. Katika hali kama hiyo, unaweza kujaribu kuianzisha tena na uangalie hali yake tena.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Kwa kuongeza, ikiwa seva inaendesha kama inavyoonyeshwa na amri ifuatayo, lakini bado unaona hitilafu hapo juu, unapaswa pia kuthibitisha kwamba bandari ya TCP/IP imefungwa na firewall au huduma yoyote ya kuzuia bandari.

$ ps xa | grep mysqld | grep -v mysqld

Ili netstat amri kama inavyoonyeshwa.

$ sudo netstat -tlpn | grep "mysql"

2. Haiwezi Kuunganishwa kwenye Seva ya MySQL

Hitilafu nyingine ya kawaida ya muunganisho ni \(2003) Haiwezi kuunganisha kwenye seva ya MySQL kwenye ‘seva’ (10061)”, ambayo ina maana kwamba muunganisho wa mtandao umekataliwa.

Hapa, anza kwa kuangalia kuwa kuna seva ya MySQL inayoendesha kwenye mfumo kama inavyoonyeshwa hapo juu. Pia hakikisha kwamba seva ina miunganisho ya mtandao iliyowezeshwa na kwamba mlango wa mtandao unaotumia kuunganisha ndio uliosanidiwa kwenye seva.

Makosa mengine ya kawaida ambayo unaweza kukutana nayo unapojaribu kuunganishwa na seva ya MySQL ni:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

Hitilafu hizi zinaonyesha kuwa seva inaweza kufanya kazi, hata hivyo, unajaribu kuunganisha kwa kutumia mlango wa TCP/IP, bomba lililopewa jina, au faili ya soketi ya Unix tofauti na ile ambayo seva inasikiliza.

3. Fikia Hitilafu Zilizokataliwa katika MySQL

Katika MySQL, akaunti ya mtumiaji inafafanuliwa kulingana na jina la mtumiaji na mwenyeji wa mteja au wapangishi ambapo mtumiaji anaweza kuunganisha kwenye seva. Kwa kuongeza, akaunti inaweza pia kuwa na vitambulisho vya uthibitishaji kama vile nenosiri.

Ingawa kuna sababu nyingi tofauti za hitilafu za \Ufikiaji umekataliwa, mojawapo ya sababu za kawaida ni kuhusiana na akaunti za MySQL ambazo seva huruhusu programu za mteja kutumia wakati wa kuunganisha. Inaonyesha kuwa jina la mtumiaji lililobainishwa kwenye muunganisho halina upendeleo wa kufikia. hifadhidata.

MySQL inaruhusu uundaji wa akaunti zinazowezesha watumiaji wa mteja kuunganishwa kwenye seva na kufikia data inayodhibitiwa na seva. Katika suala hili, ikiwa unakabiliwa na hitilafu iliyokataliwa ya ufikiaji, angalia ikiwa akaunti ya mtumiaji inaruhusiwa kuunganishwa na seva kupitia programu ya mteja unayotumia, na ikiwezekana mwenyeji ambaye uunganisho unatoka.

Unaweza kuona ni mapendeleo gani akaunti fulani inayo kwa kutekeleza amri ya ONYESHA RUZUKU kama inavyoonyeshwa.

> SHOW GRANTS FOR 'tecmint'@'localhost';

Unaweza kutoa mapendeleo kwa mtumiaji fulani kwenye hifadhidata maalum kwa anwani ya ip ya mbali kwa kutumia amri zifuatazo kwenye shell ya MySQL.

> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100';
> flush privileges;

Zaidi ya hayo, hitilafu zilizokataliwa za ufikiaji zinaweza pia kutokana na matatizo ya kuunganisha kwenye MySQL, rejea makosa yaliyoelezwa hapo awali.

4. Muunganisho Uliopotea kwa Seva ya MySQL

Huenda ukakumbana na hitilafu hii kutokana na mojawapo ya sababu zifuatazo: muunganisho duni wa mtandao, muda wa muunganisho umekwisha au tatizo la thamani za BLOB ambazo ni kubwa kuliko max_allowed_packet. Ikiwa kuna tatizo la muunganisho wa mtandao, hakikisha kuwa una muunganisho mzuri wa mtandao hasa ikiwa unafikia seva ya hifadhidata ya mbali.

Ikiwa ni tatizo la muunganisho wa muda kuisha, hasa MySQL inapojaribu kutumia muunganisho wa awali kwenye seva, ongeza thamani ya kigezo cha connect_timeout. Lakini ikiwa kuna thamani za BLOB ambazo ni kubwa kuliko max_allowed_packet, unahitaji kuweka thamani ya juu kwa max_allowed_packet katika /etc/my.cnf faili yako ya usanidi chini ya [mysqld] au [mteja] sehemu kama inavyoonyeshwa.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ikiwa faili ya usanidi wa MySQL haipatikani kwako, basi unaweza kuweka thamani hii kwa kutumia amri ifuatayo kwenye shell ya MySQL.

> SET GLOBAL connect_timeout=100;
> SET GLOBAL max_allowed_packet=524288000;

5. Viunganishi vingi vya MySQL

Iwapo mteja wa MySQL atakumbana na hitilafu ya \miunganisho mingi sana, inamaanisha kuwa miunganisho yote inayopatikana inatumiwa na wateja wengine. Idadi ya miunganisho (chaguomsingi ni 151) inadhibitiwa na mfumo wa max_connections kutofautisha; unaweza kutatua tatizo kwa kuongeza thamani yake ili kuruhusu miunganisho zaidi katika /etc/my.cnf faili yako ya usanidi.

[mysqld]
max_connections=1000

6. Nje ya Kumbukumbu MySQL

Iwapo utaendesha swali kwa kutumia programu ya mteja wa MySQL na kukutana na hitilafu inayohusika, inamaanisha kwamba MySQL haina kumbukumbu ya kutosha kuhifadhi matokeo yote ya hoja.

Hatua ya kwanza ni kuhakikisha kuwa swala ni sahihi, ikiwa ni hivyo, basi fanya yafuatayo:

  • ikiwa unatumia kiteja cha MySQL moja kwa moja, ianze na --swichi ya haraka, kuzima matokeo yaliyohifadhiwa au
  • ikiwa unatumia kiendeshi cha MyODBC, kiolesura cha usanidi cha mtumiaji (UI) kina kichupo cha kina cha bendera. Angalia Usihifadhi matokeo.

Chombo kingine kikubwa ni, MySQL Tuner - hati muhimu ambayo itaunganishwa na seva ya MySQL inayoendesha na inatoa mapendekezo ya jinsi inaweza kusanidiwa kwa utendaji wa juu.

$ sudo apt-get install mysqltuner     #Debian/Ubuntu
$ sudo yum install mysqltuner         #RHEL/CentOS/Fedora
$ mysqltuner

Kwa uboreshaji wa MySQL na vidokezo vya kurekebisha utendakazi, soma makala yetu: Vidokezo 15 Muhimu vya Urekebishaji na Uboreshaji wa MySQL/MariaDB.

7. MySQL Inaendelea Kuharibika

Ukikumbana na tatizo hili, unapaswa kujaribu kujua kama tatizo ni kwamba seva ya MySQL inakufa au ikiwa ni mteja aliye na suala. Kumbuka kuwa seva nyingi za kuacha kufanya kazi husababishwa na faili mbovu za data au faili za faharasa.

Unaweza kuangalia hali ya seva ili kujua ni muda gani imekuwa ikitumika.

$ sudo systemctl status mysql       #Debian/Ubuntu
$ sudo systemctl status mysqld      #RHEL/CentOS/Fedora

Vinginevyo, endesha amri ifuatayo ya mysqladmin ili kupata uptime wa seva ya MySQL.

$ sudo mysqladmin version -p 

Suluhisho zingine ni pamoja na lakini sio mdogo kusimamisha seva ya MySQL na kuwezesha utatuzi, kisha anza huduma tena. Unaweza kujaribu kufanya kesi ya mtihani ambayo inaweza kutumika kurudia tatizo. Kwa kuongezea, fungua kidirisha cha ziada cha terminal na endesha amri ifuatayo ili kuonyesha takwimu za mchakato wa MySQL wakati unaendesha maswali yako mengine:

$ sudo mysqladmin -i 5 status
OR
$ sudo mysqladmin -i 5 -r status 

Ingawa tumeangalia baadhi ya matatizo na makosa ya kawaida ya MySQL na pia kutoa njia za kuyatatua na kuyatatua, jambo la muhimu zaidi katika kugundua kosa ni kuelewa maana yake (kulingana na kile kinachosababisha).

Kwa hivyo unawezaje kuamua hii? Vidokezo vifuatavyo vitakuongoza jinsi ya kujua ni nini hasa kinachosababisha shida:

  1. Hatua ya kwanza na muhimu zaidi ni kuangalia kumbukumbu za MySQL ambazo zimehifadhiwa kwenye saraka /var/log/mysql/. Unaweza kutumia huduma za mstari wa amri kama vile mkia kusoma faili za kumbukumbu.
  2. Ikiwa huduma ya MySQL itashindwa kuanza, angalia hali yake kwa kutumia systemctl au tumia journetctl (iliyo na -xe amri) chini ya systemd kuchunguza tatizo.
  3. Unaweza pia kuchunguza faili ya kumbukumbu ya mfumo kama vile /var/log/messages au sawa kwa sababu za tatizo lako.
  4. Jaribu kutumia zana kama vile htop ili kuangalia ni programu gani inachukua CPU yote au inafunga mashine au kukagua ikiwa unaishiwa na kumbukumbu, nafasi ya diski, maelezo ya faili, au nyenzo nyingine muhimu.
  5. Kwa kudhani kuwa tatizo hilo ni mchakato fulani, unaweza kujaribu kuua kila wakati (kwa kutumia pkill au kill shirika) ili MySQL ifanye kazi kama kawaida.
  6. Tuseme kwamba seva ya mysqld inasababisha matatizo, unaweza kutekeleza amri: mysqladmin -u root ping au mysqladmin -u orodha ya mchakato wa mizizi ili kupata jibu lolote kutoka kwayo.
  7. Ikiwa tatizo ni la programu ya mteja wako wakati unajaribu kuunganisha kwenye seva ya MySQL, angalia kwa nini haifanyi kazi vizuri, jaribu kupata matokeo yoyote kutoka kwayo kwa madhumuni ya utatuzi.

Unaweza pia kupenda kusoma nakala hizi zifuatazo zinazohusiana na MySQL:

  1. Jifunze MySQL/MariaDB kwa Wanaoanza - Sehemu ya 1
  2. Jinsi ya Kufuatilia Hifadhidata za MySQL/MariaDB kwa kutumia Netdata kwenye CentOS 7
  3. Jinsi ya Kuhamisha Hifadhidata Zote za MySQL Kutoka Seva ya Zamani hadi Seva Mpya
  4. Mytop – Zana Muhimu ya Kufuatilia Utendaji wa MySQL/MariaDB katika Linux
  5. Mbinu 12 za Usalama za MySQL/MariaDB kwa Linux

Kwa maelezo zaidi, angalia mwongozo wa Marejeleo ya MySQL kuhusu Matatizo na Makosa ya Kawaida, unaorodhesha kwa ukamilifu matatizo ya kawaida na ujumbe wa makosa ambao unaweza kukutana nao unapotumia MySQL, ikijumuisha zile ambazo tumejadili hapo juu na zaidi.