Gagnlegar ráðleggingar til að leysa algengar villur í MySQL


MySQL er mikið notað opinn uppspretta venslagagnagrunnsstjórnunarkerfi (RDMS) í eigu Oracle. Það hefur í gegnum árin verið sjálfgefið val fyrir vefforrit og er enn vinsælt í samanburði við aðrar gagnagrunnsvélar.

MySQL var hannað og fínstillt fyrir vefforrit - það er óaðskiljanlegur hluti af helstu vefforritum eins og Facebook, Twitter, Wikipedia, YouTube og mörgum öðrum.

Er vefsíðan þín eða vefforritið knúið af MySQL? Í þessari ítarlegu grein munum við útskýra hvernig á að leysa vandamál og algengar villur á MySQL gagnagrunnsþjóni. Við munum lýsa því hvernig á að ákvarða orsakir vandamálanna og hvað á að gera til að leysa þau.

1. Get ekki tengst staðbundnum MySQL netþjóni

Ein algengasta villan í tengingu biðlara við netþjón í MySQL er VILLA 2002 (HY000): Get ekki tengst staðbundnum MySQL netþjóni í gegnum fals '/var/run/mysqld/mysqld.sock' (2).

Þessi villa gefur til kynna að enginn MySQL þjónn (mysqld) sé í gangi á hýsingarkerfinu eða að þú hafir tilgreint rangt Unix socket skráarheiti eða TCP/IP tengi þegar reynt var að tengjast þjóninum.

Gakktu úr skugga um að þjónninn sé í gangi með því að athuga ferli sem heitir mysqld á gagnagrunnsþjóninum þínum með því að nota grep skipunina saman eins og sýnt er.

$ ps xa | grep mysqld | grep -v mysqld

Ef ofangreindar skipanir sýna engin framleiðsla, þá er gagnagrunnsþjónninn ekki í gangi. Þess vegna getur viðskiptavinurinn ekki tengst því. Til að ræsa netþjóninn skaltu keyra eftirfarandi systemctl skipun.

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

Til að staðfesta MySQL þjónustustöðuna skaltu nota eftirfarandi skipun.

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

Frá framleiðslu ofangreindrar skipunar hefur MySQL þjónustan mistekist. Í slíku tilviki geturðu reynt að endurræsa það og athuga stöðu þess einu sinni enn.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Að auki, ef þjónninn er í gangi eins og eftirfarandi skipun sýnir, en þú sérð samt villuna hér að ofan, ættir þú einnig að staðfesta að TCP/IP tengið sé læst af eldvegg eða einhverri þjónustu sem lokar á höfn.

$ ps xa | grep mysqld | grep -v mysqld

Til að netstat skipun eins og sýnt er.

$ sudo netstat -tlpn | grep "mysql"

2. Get ekki tengst MySQL Server

Önnur algeng tengingarvilla er (2003) Can't connect to MySQL server on 'server' (10061), sem þýðir að nettengingunni hefur verið hafnað.

Hér skaltu byrja á því að athuga hvort það sé MySQL þjónn í gangi á kerfinu eins og sýnt er hér að ofan. Gakktu úr skugga um að nettengingar séu virkar á netþjóninum og að netgáttin sem þú notar til að tengjast sé sú sem er stillt á þjóninum.

Aðrar algengar villur sem þú munt líklega lenda í þegar þú reynir að tengjast MySQL netþjóninum eru:

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)

Þessar villur gefa til kynna að þjónninn gæti verið í gangi, en þú ert að reyna að tengjast með því að nota TCP/IP tengi, nefnd pípa eða Unix falsskrá sem er önnur en sú sem þjónninn hlustar á.

3. Aðgangur hafnað villur í MySQL

Í MySQL er notendareikningur skilgreindur með tilliti til notendanafns og viðskiptavinahýsingaraðila eða gestgjafa sem notandinn getur tengst þjóninum frá. Að auki getur reikningur einnig haft auðkenningarupplýsingar eins og lykilorð.

Þrátt fyrir að það séu margar mismunandi orsakir fyrir villum fyrir \Aðgangi hafnað er ein algengasta orsökin tengd MySQL reikningunum sem þjónninn leyfir biðlaraforritum að nota við tengingu. Það gefur til kynna að notandanafn sem tilgreint er í tengingunni hafi ekki aðgangsréttindi gagnagrunninum.

MySQL gerir kleift að búa til reikninga sem gera viðskiptavinum notendum kleift að tengjast þjóninum og fá aðgang að gögnum sem stjórnað er af þjóninum. Í þessu sambandi, ef þú lendir í villu sem er hafnað fyrir aðgangi, athugaðu hvort notendareikningnum sé heimilt að tengjast þjóninum í gegnum biðlaraforritið sem þú notar, og hugsanlega hýsilinn sem tengingin kemur frá.

Þú getur séð hvaða réttindi tiltekinn reikningur hefur með því að keyra skipunina SHOW GRANTS eins og sýnt er.

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

Þú getur veitt tilteknum notanda réttindi á tilteknum gagnagrunni á ytri IP-tölu með því að nota eftirfarandi skipanir í MySQL skelinni.

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

Ennfremur geta villur vegna aðgangs sem hafnað er einnig stafað af vandamálum við að tengjast MySQL, vísa til villunnar sem áður voru útskýrðar.

4. Lost tenging við MySQL Server

Þú gætir rekist á þessa villu af einni af eftirfarandi ástæðum: léleg nettenging, tengingartími eða vandamál með BLOB gildi sem eru stærri en max_allowed_packet. Ef um vandamál er að ræða við nettengingu, vertu viss um að þú sért með góða nettengingu, sérstaklega ef þú ert að fá aðgang að ytri gagnagrunnsþjóni.

Ef það er vandamál með tímamörk fyrir tengingu, sérstaklega þegar MySQL er að reyna að nota upphaflega tengingu við netþjóninn, aukið gildi connect_timeout færibreytunnar. En ef um er að ræða BLOB gildi sem eru stærri en max_allowed_packet, þá þarftu að stilla hærra gildi fyrir max_allowed_packet í /etc/my.cnf stillingarskránni þinni undir [mysqld] eða [viðskiptavinur] hluta eins og sýnt er.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ef MySQL stillingarskráin er ekki aðgengileg fyrir þig, þá geturðu stillt þetta gildi með því að nota eftirfarandi skipun í MySQL skelinni.

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

5. Of margar MySQL tengingar

Ef MySQL viðskiptavinur lendir í \of margar tengingar villuna þýðir það að allar tiltækar tengingar eru í notkun hjá öðrum viðskiptavinum. Fjöldi tenginga (sjálfgefið er 151) er stjórnað af max_connections kerfinu breytu; þú getur lagfært vandamálið með því að auka gildi þess til að leyfa fleiri tengingar í /etc/my.cnf stillingarskránni þinni.

[mysqld]
max_connections=1000

6. Minnislaust MySQL

Ef þú keyrir fyrirspurn með MySQL biðlaraforritinu og lendir í viðkomandi villu þýðir það að MySQL hefur ekki nóg minni til að geyma alla fyrirspurnarniðurstöðuna.

Fyrsta skrefið er að tryggja að fyrirspurnin sé rétt, ef svo er, gerðu eftirfarandi:

  • ef þú ert að nota MySQL biðlara beint skaltu byrja hann með --quick switch, til að slökkva á niðurstöðum í skyndiminni eða
  • ef þú ert að nota MyODBC rekilinn, þá er notendaviðmót stillinga (UI) með háþróaðan flipa fyrir fána. Hakaðu við „Ekki vista niðurstöðu“.

Annað frábært tól er MySQL Tuner - gagnlegt handrit sem mun tengjast MySQL netþjóni sem er í gangi og gefur tillögur um hvernig hægt er að stilla hann fyrir meiri afköst.

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

Fyrir MySQL hagræðingu og afkastastillingarráð, lestu greinina okkar: 15 Gagnlegar MySQL/MariaDB árangursstillingar og hagræðingarráð.

7. MySQL heldur áfram að hrynja

Ef þú lendir í þessu vandamáli ættirðu að reyna að komast að því hvort vandamálið sé að MySQL þjónninn deyr eða hvort það sé viðskiptavinurinn með vandamál. Athugaðu að mörg netþjónshrun stafar af skemmdum gagnaskrám eða vísitöluskrám.

Þú getur athugað stöðu netþjónsins til að ákvarða hversu lengi hann hefur verið í gangi.

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

Að öðrum kosti skaltu keyra eftirfarandi mysqladmin skipun til að finna spenntur á MySQL þjóninum.

$ sudo mysqladmin version -p 

Aðrar lausnir fela í sér en takmarkast ekki við að stöðva MySQL netþjóninn og virkja villuleit, ræstu síðan þjónustuna aftur. Þú getur reynt að búa til prufutilfelli sem hægt er að nota til að endurtaka vandamálið. Að auki skaltu opna viðbótar flugstöðvarglugga og keyra eftirfarandi skipun til að sýna MySQL ferli tölfræði á meðan þú keyrir aðrar fyrirspurnir þínar:

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

Þó að við höfum skoðað nokkur algeng MySQL vandamál og villur og einnig veitt leiðir til að leysa þau og leysa þau, þá er það mikilvægasta við að greina villu að skilja hvað hún þýðir (með tilliti til hvað veldur henni).

Svo hvernig geturðu ákvarðað þetta? Eftirfarandi atriði munu leiðbeina þér um hvernig á að ganga úr skugga um hvað er nákvæmlega sem veldur vandamálinu:

  1. Fyrsta og mikilvægasta skrefið er að skoða MySQL annálana sem eru geymdir í möppunni /var/log/mysql/. Þú getur notað skipanalínuforrit eins og tail til að lesa í gegnum annálaskrárnar.
  2. Ef MySQL þjónusta mistekst að ræsa, athugaðu stöðu hennar með systemctl eða notaðu journetctl (með -xe fánanum) undir systemd til að kanna vandamálið.
  3. Þú getur líka skoðað kerfisskrár eins og /var/log/messages eða álíka af ástæðum fyrir vandamálinu þínu.
  4. Prófaðu að nota verkfæri eins og htop til að athuga hvaða forrit er að taka allan örgjörvann eða læsir vélinni eða til að athuga hvort þú sért að verða uppiskroppa með minni, pláss, skráarlýsingar eða önnur mikilvæg auðlind.
  5. Að því gefnu að vandamálið sé eitthvað áhlaupaferli geturðu alltaf reynt að drepa það (með því að nota pkill eða kill tólið) þannig að MySQL virki eðlilega.
  6. Svo sem að mysqld þjónninn sé að valda vandamálum geturðu keyrt skipunina: mysqladmin -u root ping eða mysqladmin -u root processlist til að fá öll svör frá honum.
  7. Ef vandamálið er með biðlaraforritið þitt á meðan þú reynir að tengjast MySQL þjóninum, athugaðu hvers vegna það virkar ekki vel, reyndu að fá úttak frá því í bilanaleitarskyni.

Þú gætir líka viljað lesa þessar eftirfarandi MySQL tengdar greinar:

  1. Lærðu MySQL/MariaDB fyrir byrjendur – Part 1
  2. Hvernig á að fylgjast með MySQL/MariaDB gagnasöfnum með Netdata á CentOS 7
  3. Hvernig á að flytja alla MySQL gagnagrunna frá gömlum yfir í nýjan netþjón
  4. Mytop – Gagnlegt tól til að fylgjast með MySQL/MariaDB frammistöðu í Linux
  5. 12 MySQL/MariaDB öryggisaðferðir fyrir Linux

Fyrir frekari upplýsingar, skoðaðu MySQL tilvísunarhandbókina varðandi vandamál og algengar villur, hún listar ítarlega upp algeng vandamál og villuboð sem þú gætir lent í þegar þú notar MySQL, þar á meðal þau sem við höfum fjallað um hér að ofan og fleira.