Suġġerimenti Utli biex Issolvi l-problemi ta' Żbalji Komuni fil-MySQL


MySQL hija sistema ta' ġestjoni tad-database relazzjonali ta' sors miftuħ (RDMS) li hija proprjetà ta' Oracle. Matul is-snin kienet l-għażla awtomatika għal applikazzjonijiet ibbażati fuq il-web u għadha popolari meta mqabbla ma 'magni tad-databases oħra.

MySQL kien iddisinjat u ottimizzat għal applikazzjonijiet tal-web - jifforma parti integrali minn applikazzjonijiet ewlenin ibbażati fuq il-web bħal Facebook, Twitter, Wikipedia, YouTube, u ħafna oħrajn.

Is-sit jew l-applikazzjoni tal-web tiegħek hija mħaddma minn MySQL? F'dan l-artikolu dettaljat, se nispjegaw kif issolvi problemi u żbalji komuni fis-server tad-database MySQL. Se niddeskrivu kif niddeterminaw il-kawżi tal-problemi u x'għandek tagħmel biex issolvihom.

1. Ma tistax tikkonnettja ma' MySQL Server Lokali

Waħda mill-iżbalji komuni ta' konnessjoni bejn klijent u server f'MySQL hija \ŻERROR 2002 (HY000): Ma tistax tikkonnettja ma' server MySQL lokali permezz ta' socket '/var/run/mysqld/mysqld.sock' (2).

Dan l-iżball jindika li m'hemm l-ebda server MySQL (mysqld) qed jaħdem fuq is-sistema ospitanti jew li speċifikajt isem tal-fajl tas-socket Unix ħażin jew port TCP/IP meta tkun qed tipprova tikkonnettja mas-server.

Kun żgur li s-server qed jaħdem billi tiċċekkja proċess bl-isem mysqld fuq il-host server tad-database tiegħek billi tuża l-kmand grep flimkien kif muri.

$ ps xa | grep mysqld | grep -v mysqld

Jekk il-kmandi ta 'hawn fuq ma juru l-ebda output, allura s-server tad-database mhux qed jaħdem. Għalhekk il-klijent ma jistax jgħaqqad miegħu. Biex tibda s-server, mexxi l-kmand systemctl li ġej.

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

Biex tivverifika l-istatus tas-servizz MySQL, uża l-kmand li ġej.

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

Mill-output tal-kmand ta 'hawn fuq, is-servizz MySQL falla. F'każ bħal dan, tista 'tipprova terġa' tibda u tivverifika l-istatus tagħha għal darb'oħra.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Barra minn hekk, jekk is-server qed jaħdem kif muri mill-kmand li ġej, iżda xorta tara l-iżball ta 'hawn fuq, għandek tivverifika wkoll li l-port TCP/IP huwa mblukkat minn firewall jew kwalunkwe servizz ta' imblukkar tal-port.

$ ps xa | grep mysqld | grep -v mysqld

Biex jikkmanda netstat kif muri.

$ sudo netstat -tlpn | grep "mysql"

2. Ma tistax tikkonnettja ma 'MySQL Server

Żball ieħor ta' konnessjoni li jiltaqa' magħhom huwa \(2003) Ma tistax tikkonnettja ma' server MySQL fuq 'server' (10061), li jfisser li l-konnessjoni tan-netwerk ġiet rifjutata.

Hawnhekk, ibda billi ċċekkja li hemm server MySQL jaħdem fuq is-sistema kif muri hawn fuq. Żgura wkoll li s-server ikollu konnessjonijiet tan-netwerk attivati u li l-port tan-netwerk li qed tuża biex tikkonnettja huwa dak ikkonfigurat fuq is-server.

Żbalji komuni oħra li x'aktarx tiltaqgħu magħhom meta tipprova tikkonnettja mas-server MySQL huma:

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)

Dawn l-iżbalji jindikaw li s-server jista 'jkun qed jaħdem, madankollu, qed tipprova tikkonnettja billi tuża port TCP/IP, pajp imsemmi, jew fajl tas-socket Unix differenti minn dak li fuqu qed jisma' s-server.

3. Aċċess Miċħud Żbalji f'MySQL

Fil-MySQL, kont tal-utent huwa definit f'termini ta 'isem tal-utent u l-host tal-klijent jew hosts li minnhom l-utent jista' jikkonnettja mas-server. Barra minn hekk, kont jista' jkollu wkoll kredenzjali ta' awtentikazzjoni bħal password.

Għalkemm hemm ħafna kawżi differenti ta 'żbalji \Aċċess miċħud, waħda mill-kawżi komuni hija relatata mal-kontijiet MySQL li s-server jippermetti li l-programmi tal-klijenti jużaw meta jikkonnettjaw. Tindika li l-isem tal-utent speċifikat fil-konnessjoni m'għandux privileġġi għall-aċċess. id-database.

MySQL jippermetti l-ħolqien ta' kontijiet li jippermettu lill-utenti tal-klijenti jikkonnettjaw mas-server u jaċċessaw id-dejta ġestita mis-server. F'dan ir-rigward, jekk tiltaqa' ma' żball ta' aċċess miċħud, iċċekkja jekk il-kont tal-utent huwiex permess li jgħaqqad mas-server permezz tal-programm klijent li qed tuża, u possibilment l-host li minnu tkun ġejja l-konnessjoni.

Tista' tara x'privileġġi għandu kont partikolari billi tħaddem il-kmand SHOW GRANTS kif muri.

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

Tista 'tagħti privileġġi lil utent partikolari fuq database speċifika għall-indirizz ip remot billi tuża l-kmandi li ġejjin fil-qoxra MySQL.

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

Barra minn hekk, żbalji ta 'aċċess miċħud jistgħu jirriżultaw ukoll minn problemi bil-konnessjoni ma' MySQL, irreferi għall-iżbalji spjegati qabel.

4. Konnessjoni mitlufa għal MySQL Server

Tista' tiltaqa' ma' dan l-iżball minħabba waħda mir-raġunijiet li ġejjin: konnettività fqira tan-netwerk, timeout tal-konnessjoni jew problema b'valuri BLOB li huma akbar minn max_allowed_packet. F'każ ta' problema ta' konnessjoni tan-netwerk, kun żgur li għandek konnessjoni tajba tan-netwerk speċjalment jekk qed taċċessa server ta' database remot.

Jekk hija problema ta' timeout tal-konnessjoni, partikolarment meta MySQL qed jipprova juża konnessjoni inizjali mas-server, żid il-valur tal-parametru connect_timeout. Iżda fil-każ ta' valuri BLOB li huma akbar minn max_allowed_packet, trid tissettja valur ogħla għall-max_allowed_packet fil-fajl ta' konfigurazzjoni /etc/my.cnf tiegħek taħt [mysqld] jew [client] sezzjoni kif muri.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jekk il-fajl tal-konfigurazzjoni MySQL mhuwiex aċċessibbli għalik, allura tista 'tissettja dan il-valur billi tuża l-kmand li ġej fil-qoxra MySQL.

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

5. Wisq Konnessjonijiet MySQL

F'każ li klijent MySQL jiltaqa' ma' l-iżball \wisq konnessjonijiet, dan ifisser li l-konnessjonijiet kollha disponibbli qed jintużaw minn klijenti oħra. In-numru ta' konnessjonijiet (default huwa 151) huwa kkontrollat mis-sistema max_connections varjabbli; tista' tirrimedja l-problema billi żżid il-valur tagħha biex tippermetti aktar konnessjonijiet fil-fajl tal-konfigurazzjoni /etc/my.cnf tiegħek.

[mysqld]
max_connections=1000

6. Minn Memorja MySQL

F'każ li tmexxi mistoqsija billi tuża l-programm klijent MySQL u tiltaqa 'ma' l-iżball inkwistjoni, dan ifisser li MySQL m'għandux memorja biżżejjed biex taħżen ir-riżultat kollu tal-mistoqsija.

L-ewwel pass huwa li tiżgura li l-mistoqsija hija korretta, jekk hi, imbagħad agħmel dan li ġej:

  • jekk qed tuża klijent MySQL direttament, ibdah b'--swiċċ malajr, biex tiddiżattiva r-riżultati fil-cache jew
  • jekk qed tuża s-sewwieq MyODBC, l-interface tal-utent tal-konfigurazzjoni (UI) għandha tab avvanzata għall-bnadar. Iċċekkja Ma tiġborx ir-riżultat fil-cache.

Għodda oħra kbira hija, MySQL Tuner - skript utli li se jgħaqqad ma 'server MySQL li qed jaħdem u jagħti suġġerimenti dwar kif jista' jiġi kkonfigurat għal prestazzjoni ogħla.

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

Għal pariri dwar l-ottimizzazzjoni u l-irfinar tal-prestazzjoni tal-MySQL, aqra l-artiklu tagħna: 15 Tips Utli dwar l-Irfinar u l-Ottimizzazzjoni tal-Prestazzjoni MySQL/MariaDB.

7. MySQL Iżomm Jiġġarrfu

Jekk tiltaqa 'ma' din il-problema, għandek tipprova ssib jekk il-problema hijiex li s-server MySQL imut jew jekk hux il-klijent bi kwistjoni. Innota li ħafna ħabtiet tas-server huma kkawżati minn fajls tad-dejta korrotta jew fajls tal-indiċi.

Tista 'tiċċekkja l-istatus tas-server biex tistabbilixxi għal kemm ilu jaħdem.

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

Inkella, ħaddem il-kmand mysqladmin li ġej biex issib uptime tas-server MySQL.

$ sudo mysqladmin version -p 

Soluzzjonijiet oħra jinkludu iżda mhux limitati għall-waqfien tas-server MySQL u l-abilitazzjoni tad-debugging, imbagħad ibda s-servizz mill-ġdid. Tista 'tipprova tagħmel każ tat-test li jista' jintuża biex tirrepeti l-problema. Barra minn hekk, iftaħ tieqa terminali addizzjonali u mexxi l-kmand li ġej biex turi l-istatistika tal-proċess MySQL waqt li tmexxi l-mistoqsijiet l-oħra tiegħek:

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

Għalkemm ħaresna lejn xi problemi u żbalji komuni tal-MySQL u pprovdejna wkoll modi biex issolvi l-problemi u ssolvihom, l-iktar ħaġa importanti fid-dijanjosi ta 'żball hija li nifhmu xi jfisser (f'termini ta' x'qed jikkawżah).

Allura kif tista 'tiddetermina dan? Il-punti li ġejjin jiggwidawk dwar kif taċċerta x'qed jikkawża problema eżattament:

  1. L-ewwel u l-aktar pass importanti huwa li tħares lejn ir-reġistri tal-MySQL li huma maħżuna fid-direttorju /var/log/mysql/. Tista 'tuża utilitajiet tal-linja tal-kmand bħal denb biex taqra l-fajls tar-reġistru.
  2. Jekk is-servizz MySQL jonqos milli jibda, iċċekkja l-istatus tiegħu billi tuża systemctl jew uża l-kmand journetctl (bil-marka -xe) taħt systemd biex teżamina l-problema.
  3. Tista' wkoll teżamina l-fajl log tas-sistema bħal /var/log/messages jew simili għal raġunijiet għall-problema tiegħek.
  4. Ipprova uża għodda bħal htop biex tiċċekkja liema programm qed jieħu s-CPU kollha jew qed jissakkar il-magna jew biex jispezzjona jekk tkunx qed tispiċċa l-memorja, l-ispazju tad-diska, id-deskritturi tal-fajls, jew xi riżors importanti ieħor.
  5. Jekk wieħed jassumi li l-problema hija xi proċess maħrub, tista' dejjem tipprova toqtolha (bl-użu tal-utilità pkill jew kill) sabiex MySQL jaħdem b'mod normali.
  6. Jekk wieħed jassumi li s-server mysqld qed jikkawża problemi, tista' tħaddem il-kmand: mysqladmin -u root ping jew mysqladmin -u root processlist biex tikseb kwalunkwe tweġiba minnu.
  7. Jekk il-problema hija mal-programm klijent tiegħek waqt li tkun qed tipprova tikkonnettja mas-server MySQL, iċċekkja għaliex ma tkunx qed taħdem sew, ipprova ġġib xi output minnu għal skopijiet ta' soluzzjoni tal-problemi.

Tista' wkoll tixtieq taqra dawn l-artikoli relatati mal-MySQL li ġejjin:

  1. Tgħallem MySQL/MariaDB għall-Bidu – Parti 1
  2. Kif Tissorvelja Databases MySQL/MariaDB billi tuża Netdata fuq CentOS 7
  3. Kif Titrasferixxi l-Databases MySQL Kollha Minn Server Qadim għal Server Ġdid
  4. Mytop – Għodda Utli għall-Monitoraġġ tal-Prestazzjoni ta' MySQL/MariaDB f'Linux
  5. 12 MySQL/MariaDB Sigurtà Aħjar Prattiki għal Linux

Għal aktar informazzjoni, ikkonsulta l-manwal ta’ Referenza tal-MySQL dwar Problemi u Żbalji Komuni, jelenka b’mod komprensiv problemi komuni u messaġġi ta’ żball li tista’ tiltaqa’ magħhom waqt li tuża MySQL, inklużi dawk li ddiskutejna hawn fuq u aktar.