Naudingi patarimai, kaip pašalinti įprastas „MySQL“ klaidas


MySQL yra plačiai naudojama atvirojo kodo reliacinės duomenų bazės valdymo sistema (RDMS), priklausanti Oracle. Jau daugelį metų tai buvo numatytasis žiniatinklio programų pasirinkimas ir vis dar išlieka populiarus, palyginti su kitais duomenų bazių varikliais.

Taip pat skaitykite: kaip įdiegti naujausią „MySQL“ RHEL/CentOS ir „Fedora“

MySQL buvo sukurta ir optimizuota žiniatinklio programoms – ji yra neatsiejama pagrindinių žiniatinklio programų, tokių kaip Facebook, Twitter, , dalis. Vikipedija, YouTube ir daugelis kitų.

Ar jūsų svetainę arba žiniatinklio programą veikia MySQL? Šiame išsamiame straipsnyje paaiškinsime, kaip pašalinti MySQL duomenų bazės serverio problemas ir įprastas klaidas. Aprašysime, kaip nustatyti problemų priežastis ir ką daryti norint jas išspręsti.

1. Nepavyksta prisijungti prie vietinio MySQL serverio

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

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

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

ps xa | grep mysqld | grep -v mysqld

Jei aukščiau pateiktos komandos nerodo išvesties, duomenų bazės serveris neveikia. Todėl klientas negali prie jo prisijungti. Norėdami paleisti serverį, paleiskite š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

Remiantis anksčiau pateiktos komandos išvestimi, MySQL paslauga nepavyko. 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 nurodyta toliau pateiktoje komandoje, bet vis tiek matote pirmiau nurodytą klaidą, taip pat turėtumėte patikrinti, ar TCP/IP prievadą užblokavo ugniasienė arba bet kuri prievado blokavimo paslauga. .

ps xa | grep mysqld | grep -v mysqld

Norėdami rasti prievadą, kurio klausosi serveris, naudokite komandą netstat, 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.

Čia pirmiausia patikrinkite, ar sistemoje veikia MySQL serveris, kaip parodyta aukščiau. Taip pat įsitikinkite, kad serveryje įjungti tinklo ryšiai ir kad prisijungimui naudojamas tinklo prievadas yra tas, kuris sukonfigūruotas serveryje.

Kitos dažnos klaidos, su kuriomis galite susidurti bandydami prisijungti prie MySQL serverio, yra šios:

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ą vamzdį arba Unix lizdo failą, kuris skiriasi nuo to, kuriame klausosi serveris.

3. MySQL prieigos uždraustos klaidos

MySQL naudotojo paskyra apibrėžiama kaip naudotojo vardas ir kliento priegloba ar prieglobos, iš kurių vartotojas gali prisijungti prie serverio. Be to, paskyra taip pat gali turėti autentifikavimo kredencialus, pvz., slaptažodį.

Nors yra daug skirtingų klaidų „Prieiga uždrausta“ priežasčių, viena iš dažniausiai pasitaikančių priežasčių yra susijusi su „MySQL“ paskyromis, kurias serveris leidžia naudoti klientų programoms prisijungdamas. Tai rodo, kad ryšyje nurodytas naudotojo vardas neturi prieigos prie duomenų bazės teisių.

MySQL leidžia kurti paskyras, kurios leidžia klientų vartotojams prisijungti prie serverio ir pasiekti serverio valdomus duomenis. Šiuo atžvilgiu, jei susiduriate su klaida prieiga uždrausta, patikrinkite, ar vartotojo paskyrai leidžiama prisijungti prie serverio per jūsų naudojamą kliento programą ir galbūt pagrindinį kompiuterį, iš kurio jungiamasi. .

Galite pamatyti, kokias privilegijas turi tam tikra paskyra, vykdydami komandą SHOW GRANTS, kaip parodyta.

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

Galite suteikti privilegijas konkrečiam vartotojui konkrečioje duomenų bazėje nuotoliniam IP adresui naudodami šias komandas MySQL apvalkale.

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

Be to, uždraustos prieigos klaidos taip pat gali atsirasti dėl problemų, susijusių su prisijungimu prie „MySQL“, žr. anksčiau paaiškintas klaidas.

4. Nutrūko ryšys su MySQL serveriu

Su šia klaida galite susidurti dėl vienos iš šių priežasčių: prastas tinklo ryšys, ryšio skirtasis laikas arba problema dėl BLOB verčių, kurios yra didesnės nei max_allowed_packet. Kilus tinklo ryšio problemai, įsitikinkite, kad turite gerą tinklo ryšį, ypač jei jungiatės prie nuotolinio duomenų bazės serverio.

Jei tai ryšio skirtojo laiko problema, ypač kai MySQL bando naudoti pradinį ryšį su serveriu, padidinkite parametro connect_timeout reikšmę. . 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 failą skiltyje [mysqld] arba [klientas], kaip parodyta.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jei MySQL konfigūracijos failas jums nepasiekiamas, galite nustatyti šią reikšmę naudodami šią MySQL apvalkalo komandą.

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

5. Per daug MySQL jungčių

Jei MySQL klientas susiduria su klaida „per daug ryšių“, tai reiškia, kad visi galimi ryšiai naudojami kitų klientų. Ryšių skaičius (numatytasis yra 151) valdomas sistemos kintamuoju max_connections; galite išspręsti problemą padidindami jos vertę, kad /etc/my.cnf konfigūracijos faile būtų galima prisijungti daugiau.

[mysqld]
max_connections=1000

6. Baigėsi atmintis MySQL

Jei vykdote užklausą naudodami MySQL kliento programą ir susiduriate su atitinkama klaida, tai reiškia, kad MySQL neužtenka atminties visam užklausos rezultatui išsaugoti.

Pirmiausia įsitikinkite, kad užklausa yra teisinga, jei taip, atlikite šiuos veiksmus:

  • jei MySQL klientą naudojate tiesiogiai, paleiskite jį naudodami --Quick switch, kad išjungtumėte talpykloje saugomus rezultatus arba
  • jei naudojate MyODBC tvarkyklę, konfigūracijos vartotojo sąsajoje (NS) yra išplėstinis vėliavėlių skirtukas. Pažymėkite „Neįrašyti 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

MySQL optimizavimo ir našumo derinimo patarimų rasite mūsų straipsnyje: 15 naudingų MySQL/MariaDB našumo derinimo ir optimizavimo patarimų.

7. MySQL nuolat stringa

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

Galite patikrinti serverio būseną, kad nustatytumėte, kiek laiko jis buvo sukurtas ir veikia.

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

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

sudo mysqladmin version -p 

Kiti sprendimai apima, bet neapsiribojant, MySQL serverio sustabdymą ir derinimo įgalinimą, tada vėl paleiskite paslaugą. Galite pabandyti sukurti bandomąjį atvejį, kuris gali būti naudojamas problemai pakartoti. 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 

Esmė: nustatyti, kas sukelia problemą ar klaidą

Nors išnagrinėjome kai kurias įprastas MySQL problemas ir klaidas, taip pat pateikėme trikčių šalinimo ir sprendimo būdus, diagnozuojant klaidą svarbiausia suprasti, ką ji reiškia (kalbant apie tai, kas ją sukelia). .

Taigi, kaip jūs galite tai nustatyti? Šie punktai padės išsiaiškinti, kas tiksliai sukelia problemą:

  1. Pirmas ir svarbiausias žingsnis yra peržiūrėti MySQL žurnalus, kurie saugomi kataloge /var/log/mysql/. Žurnalo failams skaityti galite naudoti komandų eilutės priemones, pvz., uodegą.
  2. Jei MySQL paslaugai nepavyksta paleisti, patikrinkite jos būseną naudodami systemctl arba naudokite komandą journetctl (su vėliavėle -xe), esančią skiltyje systemd, kad išnagrinėtumėte problemą.
  3. Taip pat galite patikrinti sistemos žurnalo failą, pvz., /var/log/messages ar panašius, kad sužinotumėte problemos priežastis.
  4. Pabandykite naudoti tokius įrankius kaip „Mytop“, „glances“, „top“, „ps“ arba „htop“, kad patikrintumėte, kuri programa užima visą procesorių arba užrakina įrenginį, arba patikrinkite, ar netrūksta atminties, vietos diske, failų aprašų ar kitų svarbių išteklių. .
  5. Darant prielaidą, kad ši problema yra kažkoks pabėgęs procesas, visada galite pabandyti ją nužudyti (naudodami pkill arba kill įrankį), kad MySQL veiktų normaliai.
  6. Tarkime, kad mysqld serveris sukelia problemų, galite paleisti komandą: mysqladmin -u root ping arba mysqladmin -u šakninis procesorius, kad gautumėte bet kurį atsakymas iš jo.
  7. Jei problema kyla dėl 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.

Taip pat galbūt norėsite perskaityti šiuos su MySQL susijusius straipsnius:

  1. Išmokite MySQL/MariaDB pradedantiesiems – 1 dalis
  2. Kaip stebėti „MySQL“/„MariaDB“ duomenų bazes naudojant „Netdata“ „CentOS 7“.
  3. Kaip perkelti visas MySQL duomenų bazes iš senojo į naują serverį
  4. „Mytop“ – naudingas įrankis „MySQL“/„MariaDB“ našumui „Linux“ stebėti
  5. 12 MySQL/MariaDB saugos geriausios praktikos, skirtos Linux

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