Naudingi patarimai, kaip pašalinti dažniausiai pasitaikančias „MySQL“ klaidas


„MySQL“ yra plačiai naudojama „Oracle“ priklausanti atvirojo kodo reliacinių duomenų bazių valdymo sistema (RDMS). Metams bėgant jis buvo numatytasis internetinių programų pasirinkimas ir vis dar išlieka populiarus, palyginti su kitais duomenų bazių varikliais.

„MySQL“ buvo sukurtas ir optimizuotas žiniatinklio programoms - jis yra neatskiriama pagrindinių internetinių programų, tokių kaip „Facebook“, „Twitter“, „Wikipedia“, „YouTube“ ir daugelio kitų, dalis.

Ar jūsų svetainę ar žiniatinklio programą palaiko „MySQL“? Šiame išsamiame straipsnyje paaiškinsime, kaip pašalinti problemas ir dažniausiai pasitaikančias klaidas „MySQL“ duomenų bazės serveryje. Aprašysime, kaip nustatyti problemų priežastis ir ką daryti, norint jas išspręsti.

1. Nepavyksta prisijungti prie vietinio „MySQL“ serverio

Viena dažniausių „MySQL“ kliento ir serverio ryšio klaidų yra „ERROR 2002 (HY000): Nepavyksta prisijungti prie vietinio„ MySQL “serverio per„ /var/run/mysqld/mysqld.sock “lizdą (2).

Ši klaida rodo, kad pagrindinėje sistemoje neveikia „MySQL“ serverio (mysqld) arba kad bandydami prisijungti prie serverio nurodėte neteisingą „Unix“ lizdo failo pavadinimą arba TCP/IP prievadą.

Įsitikinkite, kad serveris veikia, patikrindami procesą, pavadintą mysqld duomenų bazės serverio pagrindiniame kompiuteryje, naudodami komandą grep, kaip parodyta.

$ ps xa | grep mysqld | grep -v mysqld

Jei pirmiau nurodytos komandos nerodo išvesties, duomenų bazės serveris neveikia. Todėl klientas negali prisijungti prie jo. Norėdami paleisti serverį, vykdykite šią komandą systemctl.

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

Norėdami patikrinti „MySQL“ paslaugos būseną, naudokite šią komandą.

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

Iš minėtos komandos išvesties nepavyko MySQL tarnyba. Tokiu atveju galite pabandyti jį paleisti iš naujo ir dar kartą patikrinti jo būseną.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Be to, jei serveris veikia taip, kaip parodyta šioje komandoje, bet vis tiek matote pirmiau pateiktą klaidą, taip pat turėtumėte patikrinti, ar TCP/IP prievadą užblokavo užkarda ar bet kuri uosto blokavimo tarnyba.

$ ps xa | grep mysqld | grep -v mysqld

Norėdami netstat komandą, kaip parodyta.

$ sudo netstat -tlpn | grep "mysql"

2. Nepavyksta prisijungti prie „MySQL“ serverio

Kita dažnai pasitaikanti ryšio klaida yra „(2003) Nepavyksta prisijungti prie„ MySQL “serverio„ serveryje “(10061)“, o tai reiškia, kad tinklo ryšys buvo atmestas.

Pirmiausia patikrinkite, ar sistemoje veikia MySQL serveris, kaip parodyta aukščiau. Taip pat įsitikinkite, kad serveryje įjungti tinklo ryšiai ir ar tinklo prievadas, kurį naudojate prisijungimui, yra sukonfigūruotas serveryje.

Kitos dažniausiai pasitaikančios klaidos, su kuriomis tikriausiai susidursite bandydami prisijungti prie „MySQL“ serverio:

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)

Šios klaidos rodo, kad serveris gali veikti, tačiau bandote prisijungti naudodami TCP/IP prievadą, pavadintą „pipe“ arba „Unix“ lizdo failą, kitokį nei tas, kuriame serveris klausosi.

3. Prieiga prie uždraustų klaidų MySQL

„MySQL“ vartotojo paskyra apibrėžiama pagal vartotojo vardą ir kliento pagrindinį kompiuterį ar pagrindinius kompiuterius, iš kurių vartotojas gali prisijungti prie serverio. Be to, paskyroje taip pat gali būti autentifikavimo duomenys, pvz., Slaptažodis.

Nors klaidų „Prieiga uždrausta“ yra daugybė skirtingų priežasčių, viena iš dažniausių priežasčių yra susijusi su „MySQL“ paskyromis, kurias serveris leidžia naudoti kliento programoms prisijungiant. Tai rodo, kad ryšyje nurodytas vartotojo vardas neturi privilegijų patekti į duomenų bazę.

„MySQL“ leidžia sukurti paskyras, leidžiančias kliento vartotojams prisijungti prie serverio ir pasiekti serverio valdomus duomenis. Atsižvelgiant į tai, jei pastebite klaidos prieigos atsisakymą, patikrinkite, ar vartotojo abonementui leidžiama prisijungti prie serverio per jūsų naudojamą kliento programą ir galbūt pagrindinį kompiuterį, iš kurio gaunamas ryšys.

Galite pamatyti, kokias privilegijas suteikia tam tikra paskyra, vykdydami komandą RODYTI DOTACIJOS , kaip parodyta.

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

Naudodamiesi šiomis „MySQL“ apvalkalo komandomis, galite suteikti privilegijas tam tikram konkrečios duomenų bazės vartotojui nuotolinio IP adresu.

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

Be to, prieigos atsisakymo klaidos taip pat gali kilti dėl problemų prisijungiant prie „MySQL“, žr. Anksčiau paaiškintas klaidas.

4. Prarastas ryšys su „MySQL“ serveriu

Ši klaida gali kilti dėl vienos iš šių priežasčių: prastas tinklo ryšys, ryšio skirtasis laikas arba problema dėl BLOB reikšmių, kurios yra didesnės nei max_allowed_packet. Kilus tinklo ryšio problemai, įsitikinkite, kad turite gerą tinklo ryšį, ypač jei naudojatės nuotolinio duomenų bazės serveriu.

Jei tai yra ryšio skirtojo laiko problema, ypač kai „MySQL“ bando naudoti pradinį ryšį su serveriu, padidinkite parametro „connect_timeout“ vertę. Bet jei BLOB reikšmės yra didesnės nei max_allowed_packet, turite nustatyti didesnę max_allowed_packet reikšmę /etc/my.cnf konfigūracijos faile, esančiame [mysqld] arba [klientas] skyrius, kaip parodyta.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jei „MySQL“ konfigūracijos failas jums nepasiekiamas, galite nustatyti šią vertę naudodami šią komandą „MySQL“ apvalkale.

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

5. Per daug „MySQL“ jungčių

Jei „MySQL“ klientas aptinka klaidą „per daug ryšių“, tai reiškia, kad visus galimus ryšius naudoja kiti klientai. Ryšių skaičių (pagal nutylėjimą yra 151) valdo sistemos kintamasis max_connections ; problemą galite ištaisyti padidinę jos vertę, kad jūsų /etc/my.cnf konfigūracijos faile būtų galima prisijungti daugiau.

[mysqld]
max_connections=1000

6. Iš atminties trūksta MySQL

Jei vykdote užklausą naudodami „MySQL“ kliento programą ir pastebite aptariamą klaidą, tai reiškia, kad „MySQL“ nepakanka atminties visam užklausos rezultatui išsaugoti.

Pirmasis žingsnis yra įsitikinti, kad užklausa yra teisinga, jei taip, tada atlikite šiuos veiksmus:

  • jei tiesiogiai naudojate „MySQL“ klientą, paleiskite jį naudodami --quick switch , kad išjungtumėte talpykloje saugomus rezultatus arba
  • jei naudojate „MyODBC“ tvarkyklę, konfigūracijos vartotojo sąsajoje (UI) yra išplėstinis žymių žymėjimo skirtukas. Pažymėkite „Negalima talpinti rezultato talpykloje“.

Kitas puikus įrankis yra „MySQL Tuner“ - naudingas scenarijus, kuris prisijungs prie veikiančio „MySQL“ serverio ir pateiks pasiūlymų, kaip jį sukonfigūruoti siekiant didesnio našumo.

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

Norėdami gauti „MySQL“ optimizavimo ir našumo derinimo patarimų, perskaitykite mūsų straipsnį: 15 naudingų „MySQL/MariaDB“ našumo derinimo ir optimizavimo patarimų.

7. „MySQL“ palaiko avariją

Jei susiduriate su šia problema, turėtumėte pabandyti išsiaiškinti, ar problema yra ta, kad MySQL serveris miršta, ar jo klientas turi problemų. Atminkite, kad daugelį serverio gedimų sukelia sugadinti duomenų failai arba rodyklės failai.

Norėdami patikrinti, kiek laiko jis veikia, galite patikrinti serverio būseną.

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

Arba paleiskite šią „mysqladmin“ komandą, kad rastumėte „MySQL“ serverio veikimo laiką.

$ sudo mysqladmin version -p 

Kiti sprendimai apima, bet neapsiribojant, „MySQL“ serverio sustabdymą ir derinimo įgalinimą, tada paleiskite paslaugą iš naujo. Galite pabandyti sukurti bandomąjį atvejį, kurį būtų galima panaudoti pakartojant problemą. Be to, atidarykite papildomą terminalo langą ir paleiskite šią komandą, kad būtų rodoma „MySQL“ proceso statistika, kai vykdote kitas užklausas:

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

Nors mes išnagrinėjome kai kurias įprastas „MySQL“ problemas ir klaidas, taip pat pateikėme būdus, kaip jas pašalinti ir išspręsti, svarbiausia diagnozuojant klaidą suprasti, ką tai reiškia (kalbant apie tai, kas ją sukelia).

Taigi, kaip galite tai nustatyti? Šie punktai padės jums sužinoti, kas tiksliai sukelia problemą:

  1. Pirmasis ir svarbiausias žingsnis yra ieškoti „MySQL“ žurnalų, kurie saugomi kataloge /var/log/mysql/. Norėdami perskaityti žurnalo failus, galite naudoti komandinės eilutės įrankius, pvz., Tail.
  2. Jei nepavyksta paleisti „MySQL“ paslaugos, patikrinkite jos būseną naudodami „systemctl“ arba naudokite „journetctl“ (su vėliava -xe ), esančią sistemoje, kad išspręstumėte problemą.
  3. Taip pat galite išnagrinėti sistemos žurnalo failą, pvz., /var/log/messages ar panašų dėl savo problemos priežasčių.
  4. Pabandykite naudoti tokius įrankius kaip „htop“, kad patikrintumėte, kuri programa naudoja visą procesorių ar užrakina įrenginį, arba patikrinkite, ar trūksta atminties, vietos diske, failų aprašų ar kitų svarbių išteklių.
  5. Darant prielaidą, kad ši problema yra kažkoks neišspręstas procesas, visada galite pabandyti ją nužudyti (naudodami „pkill“ arba „kill“ įrankį), kad „MySQL“ veiktų paprastai.
  6. Tarkime, kad „mysqld“ serveris kelia problemų, galite paleisti komandą: mysqladmin -u root ping arba mysqladmin -u šakninių procesų sąrašas , kad gautumėte iš jo atsakymą.
  7. Jei problema kyla dėl jūsų kliento programos bandant prisijungti prie „MySQL“ serverio, patikrinkite, kodėl ji neveikia gerai, pabandykite gauti bet kokią išvestį iš jos trikčių šalinimo tikslais.

Galbūt norėtumėte perskaityti šiuos su „MySQL“ susijusius straipsnius:

  1. Sužinokite „MySQL/MariaDB“ pradedantiesiems - 1 dalis
  2. Kaip stebėti „MySQL/MariaDB“ duomenų bazes naudojant „Netdata“ sistemoje „CentOS 7“
  3. Kaip perkelti visas „MySQL“ duomenų bazes iš seno į naują serverį
  4. „Mytop“ - naudingas įrankis „MySQL“/„MariaDB“ našumui stebėti sistemoje „Linux“
  5. 12 „MySQL“/„MariaDB“ saugumo geriausios „Linux“ praktikos

Norėdami gauti daugiau informacijos, skaitykite „MySQL Reference Guide“ apie problemas ir įprastas klaidas. Jame išsamiai išvardytos dažniausios problemos ir klaidų pranešimai, su kuriais galite susidurti naudodami „MySQL“, įskaitant tuos, kuriuos aptarėme aukščiau ir dar daugiau.