MySQL-daky umumy ýalňyşlyklary düzetmek üçin peýdaly maslahatlar


MySQL, Oracle-a degişli giňden ulanylýan açyk çeşme baglanyşyk bazasyny dolandyrmak ulgamy (RDMS). Web esasly programmalar üçin köp ýyllaryň dowamynda esasy saýlaw boldy we beýleki maglumatlar bazasy hereketlendirijileri bilen deňeşdirilende henizem meşhurlygyna galýar.

MySQL web programmalary üçin işlenip düzüldi we optimallaşdyryldy - bu Facebook, Twitter, Wikipediýa, YouTube we başgalar ýaly esasy web esasly programmalaryň aýrylmaz bölegini emele getirýär.

Sahypaňyz ýa-da web programmaňyz MySQL bilen işleýärmi? Bu jikme-jik makalada, MySQL maglumat bazasynyň serwerindäki näsazlyklary we umumy ýalňyşlyklary nädip çözmelidigini düşündireris. Meseleleriň sebäplerini nädip kesgitlemelidigini we olary çözmek üçin näme etmelidigini düşündireris.

1. Myerli MySQL serwerine birigip bolmaýar

MySQL-daky serwer birikdiriş säwliklerine umumy müşderiniň biri\RALRYŞLYK 2002 (HY000): /var/run/mysqld/mysqld.sock (2) rozetkasy arkaly ýerli MySQL serwerine birigip bolmaýar.

Bu ýalňyşlyk, host ulgamynda işleýän MySQL serweriniň (mysqld) ýokdugyny ýa-da serwere birikjek bolanyňyzda nädogry Unix rozetka faýlynyň adyny ýa-da TCP/IP portuny kesgitländigiňizi görkezýär.

Görkezilişi ýaly grep buýrugyny ulanyp, maglumatlar bazasynyň serwer hostynda mysqld atly bir prosesi barlamak bilen serweriň işleýändigine göz ýetiriň.

$ ps xa | grep mysqld | grep -v mysqld

Aboveokardaky buýruklar hiç hili çykyş görkezmeýän bolsa, maglumatlar bazasynyň serweri işlemeýär. Şonuň üçin müşderi oňa birigip bilmeýär. Serweri işe girizmek üçin aşakdaky systemctl buýrugyny işlediň.

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

MySQL hyzmat ýagdaýyny barlamak üçin aşakdaky buýrugy ulanyň.

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

Aboveokardaky buýrugyň netijesinden MySQL hyzmaty şowsuz boldy. Şeýle ýagdaýda ony täzeden açyp, ýagdaýyny ýene bir gezek barlap görüp bilersiňiz.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Mundan başga-da, serwer aşakdaky buýrukda görkezilişi ýaly işleýän bolsa-da, ýokardaky ýalňyşlygy görýän bolsaňyz, TCP/IP portunyň gorag diwary ýa-da islendik port bloklaýyş hyzmaty tarapyndan petiklenendigini hem barlamaly.

$ ps xa | grep mysqld | grep -v mysqld

Görkezilişi ýaly netstat buýrugyna.

$ sudo netstat -tlpn | grep "mysql"

2. MySQL serwerine birigip bolmaýar

Commonygy-ýygydan duş gelýän birikme ýalňyşlygy\(2003) MySQL serwerine serwerde (10061) birikdirip bolmaýar, bu set birikmesiniň ret edilendigini aňladýar.

Bu ýerde, ýokarda görkezilişi ýaly ulgamda MySQL serweriniň bardygyny barlap başlaň. Şeýle hem, serweriň tor birikmeleriniň açykdygyna we birikdirmek üçin ulanýan ulgam portuňyzyň serwerde düzülenligine göz ýetiriň.

MySQL serwerine birikjek bolanyňyzda ýüze çykjak beýleki ýalňyşlyklar:

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)

Bu ýalňyşlyklar serweriň işlemeginiň mümkindigini görkezýär, ýöne, TCP/IP porty, turba ýa-da serweriň diňleýäninden tapawutly Unix rozetka faýly ulanyp birikdirjek bolýarsyňyz.

3. MySQL-de inkär edilen ýalňyşlyklara giriň

MySQL-da ulanyjy hasaby ulanyjy ady we ulanyjynyň serwere birigip bilýän müşderi öý eýesi ýa-da öý eýesi nukdaýnazaryndan kesgitlenýär. Mundan başga-da, hasapda parol ýaly tassyklama şahsyýetnamalary hem bolup biler.

\ Giriş ret edildi ýalňyşlyklarynyň dürli sebäpleri bar bolsa-da, umumy sebäpleriň biri, serwer birikdirilende müşderi programmalaryna ulanmaga rugsat berýän MySQL hasaplary bilen baglanyşyklydyr. Bu baglanyşykda görkezilen ulanyjy adynyň girmek hukugynyň ýokdugyny görkezýär. maglumat bazasy.

MySQL, müşderi ulanyjylaryna serwere birikmäge we serwer tarapyndan dolandyrylýan maglumatlara girmäge mümkinçilik berýän hasaplary döretmäge mümkinçilik berýär. Bu nukdaýnazardan, giriş ret edilen säwlik bilen ýüzbe-ýüz bolsaňyz, ulanyjy hasabyňyzyň ulanýan müşderi programmaňyz arkaly serwere birikmegine rugsat berilendigini ýa-da baglanyşygyň gelip çykýan öý eýesini barlaň.

Berlen hasapda görkezilişi ýaly SHOW GRANTS buýrugyny işledip, haýsy artykmaçlyklaryň bardygyny görüp bilersiňiz.

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

MySQL gabygyndaky aşakdaky buýruklary ulanyp, uzakdaky ip adresine belli bir maglumat bazasyndaky belli bir ulanyja artykmaçlyk berip bilersiňiz.

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

Mundan başga-da, giriş inkär edilen ýalňyşlyklar MySQL-e birikmek bilen baglanyşykly ýüze çykyp biler, ozal düşündirilen ýalňyşlyklara serediň.

4. MySQL serwerine birikmäni ýitirdi

Aşakdaky sebäpleriň biri sebäpli bu ýalňyşlyga duçar bolup bilersiňiz: tor birikmesiniň pesligi, birikmegiň gutarmagy ýa-da max_allowed_packet-den has uly BLOB bahalary bilen baglanyşykly mesele. Tor birikdirmesi meselesi ýüze çykan halatynda, esasanam uzakdaky maglumat bazasynyň serwerine girýän bolsaňyz, gowy ulgam birikmesiniň bardygyna göz ýetiriň.

Eger birikme gutarmak meselesi bolsa, esasanam MySQL serwere başlangyç birikmäni ulanjak bolanda, connect_timeout parametriniň bahasyny ýokarlandyryň. Emma max_allowed_packet-den has uly BLOB bahalary bar bolsa, [mysqld] ýa-da [müşderi] aşagyndaky /etc/my.cnf konfigurasiýa faýlyňyzda max_allowed_packet üçin has ýokary baha bellemeli. görkezilişi ýaly bölümi.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

MySQL konfigurasiýa faýly size elýeterli däl bolsa, bu bahany MySQL gabygyndaky aşakdaky buýrugy ulanyp düzüp bilersiňiz.

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

5. MySQL birikmeleri gaty köp

MySQL müşderisi\gaty köp birikme ýalňyşlygy bilen ýüzbe-ýüz bolsa, ähli baglanyşyklaryň beýleki müşderiler tarapyndan ulanylýandygyny aňladýar. Birikdirmeleriň sany (deslapky 151) max_connections ulgamy tarapyndan dolandyrylýar. üýtgeýän; /etc/my.cnf konfigurasiýa faýlyňyzda has köp birikmäge rugsat bermek üçin bahasyny ýokarlandyryp, meseläni düzedip bilersiňiz.

[mysqld]
max_connections=1000

6. MySQL ýadyndan

MySQL müşderi programmasyny ulanyp, bir soragy işledip, soralýan säwlige duşsaňyz, MySQL-iň talap netijesini saklamak üçin ýeterlik ýadynyň ýokdugyny aňladýar.

Birinji ädim, talapyň dogrydygyna göz ýetirmek, eger bar bolsa, aşakdakylary ýerine ýetiriň:

  • MySQL müşderisini gönüden-göni ulanýan bolsaňyz, keş netijelerini öçürmek üçin --quick switch bilen başlaň
  • MyODBC draýwerini ulanýan bolsaňyz, konfigurasiýa ulanyjy interfeýsinde (UI) baýdaklar üçin ösen goýma bar. Netijäni keşlemäň barlaň.

Anotherene bir ajaýyp gural, MySQL Tuner - işleýän MySQL serwerine birikjek we has ýokary öndürijilik üçin nädip sazlanyp boljakdygyny görkezýän peýdaly skriptdir.

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

MySQL optimizasiýasy we öndürijilik sazlaýyş maslahatlary üçin makalamyzy okaň: 15 Peýdaly MySQL/MariaDB öndürijilik sazlamak we optimizasiýa maslahatlary.

7. MySQL ýykylmagyny dowam etdirýär

Bu mesele bilen ýüzbe-ýüz bolsaňyz, meseläniň MySQL serweriniň ölýändigini ýa-da müşderisiniň haýsydyr bir mesele bilen baglanyşyklydygyny anyklamaga synanyşyň. Serweriň köpüsiniň çökmegine sebäp bolan maglumatlar faýllary ýa-da indeks faýllary sebäpli ýüze çykýandygyny ýadyňyzdan çykarmaň.

Serweriň ýagdaýyny näçe wagtlap işleýändigini we işleýändigini anyklap bilersiňiz.

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

Ativea-da bolmasa, MySQL serweriniň iş wagtyny tapmak üçin aşakdaky mysqladmin buýrugyny işlediň.

$ sudo mysqladmin version -p 

Beýleki çözgütler MySQL serwerini duruzmak we düzedişleri açmak bilen çäklenmeýär, soňra hyzmaty täzeden başlaň. Meseläni gaýtalamak üçin ulanyp boljak synag synagyny edip bilersiňiz. Mundan başga-da, goşmaça terminal penjiresini açyň we beýleki talaplaryňyzy işledeniňizde MySQL proses statistikasyny görkezmek üçin aşakdaky buýrugy işlediň:

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

Käbir umumy MySQL meselelerine we ýalňyşlyklaryna göz aýlasak-da, olary çözmegiň we çözmegiň usullaryny hödürlänimizde-de, ýalňyşlygy anyklamagyň iň möhümi onuň manysyna düşünmekdir (nämä sebäp bolýandygy nukdaýnazaryndan).

Muny nädip kesgitläp bilersiňiz? Aşakdaky nokatlar, nämäniň nämä sebäp bolýandygyny nädip anyklamalydygyňyzy görkezer:

  1. Ilkinji we iň möhüm ädim, /var/log/mysql/ katalogynda saklanýan MySQL surnallaryna göz aýlamakdyr. Fileurnal faýllaryny okamak üçin guýruk ýaly buýruk setirini ulanyp bilersiňiz.
  2. MySQL hyzmaty başlamasa, systemctl ulanyp, ýagdaýyny barlaň ýa-da meseläni barlamak üçin systemd astyndaky journetctl ( -xe baýdagy bilen) buýrugyny ulanyň.
  3. Şeýle hem, meseläňiziň sebäplerine görä /var/log/messages ýa-da şuňa meňzeş ulgam gündelik faýlyny gözden geçirip bilersiňiz.
  4. Haýsy programmanyň ähli CPU-ny alýandygyny ýa-da enjamy gulplaýandygyny ýa-da ýadyň, disk giňişliginiň, faýl suratlandyryjylarynyň ýa-da başga bir möhüm çeşmäniň ýokdugyny barlamak üçin htop ýaly gurallary ulanyp görüň.
  5. Meseläniň gaçmak prosesi diýip çaklasaňyz, MySQL kadaly işlemegi üçin ony öldürmäge synanyşyp bilersiňiz (pkill ýa-da kömekçi enjamy ulanyp).
  6. mysqld serweriniň problema döredýändigini göz öňünde tutup, ondan jogap almak üçin buýrugy işledip bilersiňiz: mysqladmin -u root ping ýa-da mysqladmin -u kök prosessor sanawy .
  7. MySQL serwerine birikjek bolanyňyzda müşderi programmaňyz bilen baglanyşykly bolsa, näme üçin gowy işlemeýändigini barlaň, näsazlyklary düzetmek maksady bilen ondan çykyş almaga synanyşyň.

Şeýle hem, MySQL bilen baglanyşykly aşakdaky makalalary okamak isläp bilersiňiz:

  1. Täze başlanlar üçin MySQL/MariaDB öwreniň - 1-nji bölüm
  2. CentOS 7-de Netdata ulanyp MySQL/MariaDB maglumat bazalaryna nädip gözegçilik etmeli
  3. MySQL maglumat bazalarynyň hemmesini köne-täze serwere nädip geçirmeli
  4. Mytop - Linux-da MySQL/MariaDB öndürijiligine gözegçilik etmek üçin peýdaly gural
  5. 12 MySQL/MariaDB Howpsuzlyk Linux üçin iň oňat tejribe

Has giňişleýin maglumat üçin, Meseleler we umumy ýalňyşlyklar barada MySQL salgylanma gollanmasyna serediň, MySQL ulananyňyzda ýüze çykyp biljek umumy problemalary we ýalňyş habarlary, şol sanda ýokarda ara alyp maslahatlaşanlarymyzy we başga-da köp zatlary görkezýär.