Kasulikud näpunäited MySQL-i levinud vigade tõrkeotsinguks


MySQL on laialdaselt kasutatav avatud lähtekoodiga relatsioonide andmebaaside haldussüsteem (RDMS), mis kuulub Oracle'ile. See on aastate jooksul olnud veebipõhiste rakenduste vaikevalik ja on endiselt populaarne võrreldes teiste andmebaasimootoritega.

MySQL on loodud ja optimeeritud veebirakenduste jaoks - see on lahutamatu osa peamistest veebipõhistest rakendustest nagu Facebook, Twitter, Wikipedia, YouTube ja paljud teised.

Kas teie saiti või veebirakendust toetab MySQL? Selles üksikasjalikus artiklis selgitame, kuidas MySQL-i andmebaasiserveris probleeme ja levinud tõrkeid otsida. Kirjeldame, kuidas teha kindlaks probleemide põhjused ja mida teha nende lahendamiseks.

1. Ei saa ühendust kohaliku MySQL-serveriga

Üks levinumaid klientide ja serverite vahelisi ühendusvigu MySQL-is on\"ERROR 2002 (HY000): ei saa ühenduse luua kohaliku MySQL-i serveriga sokli‘ /var/run/mysqld/mysqld.sock ’(2) kaudu”.

See tõrge näitab, et hostisüsteemis pole ühtegi MySQL-serveri (mysqld) käitamist või et olete serveriga ühenduse loomisel määranud vale Unixi sokli failinime või TCP/IP-pordi.

Veenduge, et server töötab, kontrollides oma andmebaasiserveri hostis protsessi nimega mysqld , kasutades grep-käsku koos, nagu näidatud.

$ ps xa | grep mysqld | grep -v mysqld

Kui ülaltoodud käskudel pole väljundit, siis andmebaasiserver ei tööta. Seetõttu ei saa klient sellega ühendust luua. Serveri käivitamiseks käivitage järgmine käsk systemctl.

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

MySQL-teenuse oleku kontrollimiseks kasutage järgmist käsku.

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

Ülaltoodud käsu väljundist on MySQL-i teenus nurjunud. Sellisel juhul võite proovida seda taaskäivitada ja selle olekut veel kord kontrollida.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Lisaks, kui server töötab nii, nagu on näidatud järgmises käsus, kuid näete siiski ülaltoodud tõrget, peaksite ka kontrollima, kas TCP/IP-port on tulemüüri või mis tahes pordi blokeerimisteenuse poolt blokeeritud.

$ ps xa | grep mysqld | grep -v mysqld

Netstat käsku nagu näidatud.

$ sudo netstat -tlpn | grep "mysql"

2. Ei saa ühendust MySQL-serveriga

Teine levinud ühenduse viga on\"(2003) Ei saa ühendust serveriga MySQL serveriga (10061)", mis tähendab, et võrguühendusest keelduti.

Kõigepealt kontrollige, kas süsteemis töötab MySQL-server, nagu eespool näidatud. Veenduge ka, et serveris on võrguühendused lubatud ja et ühenduse loomiseks kasutatav võrguport on serveris konfigureeritud.

Muud levinumad vead, millega tõenäoliselt MySQL-serveriga ühenduse loomisel kokku puutute, on järgmised.

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)

Need vead näitavad, et server võib töötada, kuid proovite ühenduse luua TCP/IP-pordi, nimega pipe või Unixi sokli faili abil, mis erineb serverist.

3. Juurdepääs keelatud veadele MySQL-is

MySQL-is on kasutajakonto määratletud kasutajanime ja kliendi hostina või hostidena, millest kasutaja saab serveriga ühenduse luua. Lisaks võivad kontol olla ka autentimismandaadid, näiteks parool.

Ehkki\"Juurdepääs keelatud" vigadel on palju erinevaid põhjuseid, on üks levinumaid põhjuseid seotud MySQL-i kontodega, mida server lubab kliendiprogrammidel ühenduse loomisel kasutada. See näitab, et ühenduses määratud kasutajanimel pole juurdepääsuõigusi andmebaasi.

MySQL võimaldab luua kontosid, mis võimaldavad kliendikasutajatel serveriga ühendust luua ja pääseda juurde serveri hallatavatele andmetele. Sellega seoses, kui ilmneb juurdepääsukeelu tõrge, kontrollige, kas kasutajakontol on lubatud teie serveriga ühenduse loomine teie kasutatava kliendiprogrammi kaudu ja võib-olla ka hostiga, kust ühendus tuleb.

Saate vaadata, millised privileegid antud kontol on, käivitades käsu NÄITA GRANTID , nagu näidatud.

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

Võite anda privileege konkreetsele kasutajale konkreetses andmebaasis kaug-ip-aadressile, kasutades MySQL-i kestas järgmisi käske.

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

Lisaks võivad juurdepääsu keelatud vead tuleneda ka MySQL-iga ühenduse loomisega seotud probleemidest, vaadake eelnevalt selgitatud vigu.

4. Kadunud ühendus MySQL-serveriga

See tõrge võib ilmneda ühel järgmistest põhjustest: halb võrguühendus, ühenduse aegumine või probleem BLOB-väärtustega, mis on suuremad kui max_allowed_packet. Võrguühenduse probleemi korral veenduge, et teil oleks hea võrguühendus, eriti kui pöördute kaugandmebaasi serveri poole.

Kui see on ühenduse ajalõpu probleem, eriti kui MySQL üritab serveriga esialgset ühendust kasutada, suurendage parameetri connect_timeout väärtust. Kuid BLOB-väärtuste korral, mis on suuremad kui max_allowed_packet, peate seadistama /etc/my.cnf konfiguratsioonifailis max_allowed_packet suurema väärtuse [mysqld] või [klient] jaotist nagu näidatud.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Kui MySQL-i konfiguratsioonifail pole teile juurdepääsetav, saate selle väärtuse määrata järgmise käsuga MySQL-i shellis.

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

5. Liiga palju MySQL-ühendusi

Juhul, kui MySQL-i kliendil on tõrge\"liiga palju ühendusi», tähendab see, et kõik saadaolevad ühendused on teiste klientide kasutuses. Ühenduste arvu (vaikimisi on 151) kontrollib süsteem max_connections muutuja; saate probleemi lahendada, suurendades selle väärtust, et teie /etc/my.cnf konfiguratsioonifailis oleks rohkem ühendusi.

[mysqld]
max_connections=1000

6. Mälust puudub MySQL

Juhul, kui käivitate päringu MySQL-i kliendiprogrammi abil ja ilmneb kõnealune viga, tähendab see, et MySQL-il pole kogu päringu tulemuse salvestamiseks piisavalt mälu.

Esimene samm on veenduda, et päring on õige, kui see on õige, siis tehke järgmist.

  • kui kasutate otse MySQL-i klienti, alustage seda vahemälu tulemuste keelamiseks --quick switch -ga
  • kui kasutate MyODBC draiverit, on konfiguratsiooni kasutajaliidesel (UI) lippude jaoks täpsem vahekaart. Märkige ruut „Ära vahemällu tulemust“.

Teine suurepärane tööriist on MySQL Tuner - kasulik skript, mis ühendatakse töötava MySQL-serveriga ja annab soovitusi, kuidas seda suurema jõudluse jaoks seadistada.

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

MySQL-i optimeerimise ja jõudluse häälestamise näpunäidete saamiseks lugege meie artiklit: 15 kasulikku MySQL/MariaDB jõudluse häälestamise ja optimeerimise nõuannet.

7. MySQL hoiab krahhi

Selle probleemiga peaksite proovima välja selgitada, kas probleem seisneb selles, et MySQL-server sureb või on probleem kliendil. Pange tähele, et paljud serveri krahhid on põhjustatud rikutud andmefailidest või registrifailidest.

Serveri olekut saate kontrollida, kui kaua see töötab ja töötab.

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

Teise võimalusena käivitage MySQL-i serveri uptime'i leidmiseks järgmine käsk mysqladmin.

$ sudo mysqladmin version -p 

Muude lahenduste hulka kuuluvad, kuid mitte ainult, MySQL-i serveri peatamine ja silumise lubamine, seejärel käivitage teenus uuesti. Võite proovida teha testjuhtumi, mida saab kasutada probleemi kordamiseks. Lisaks avage täiendav terminaliaken ja käivitage järgmine käsk MySQL-i protsessistatistika kuvamiseks teiste päringute käivitamisel:

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

Kuigi oleme uurinud mõningaid levinumaid MySQL-i probleeme ja vigu ning pakkunud ka viise nende tõrkeotsinguks ja lahendamiseks, on vea diagnoosimisel kõige olulisem aru saada, mida see tähendab (selle põhjuste osas).

Kuidas siis seda kindlaks teha? Järgmised punktid aitavad teil teada saada, mis täpselt probleemi põhjustab:

  1. Esimene ja kõige olulisem samm on uurida MySQL-i logisid, mis on salvestatud kataloogi /var/log/mysql/. Logifailide läbilugemiseks võite kasutada käsurea utiliite, näiteks tail.
  2. Kui MySQL-teenust ei õnnestu käivitada, kontrollige selle olekut systemctl abil või kasutage probleemi uurimiseks systemd all käsku journetctl (lipuga -xe ).
  3. Probleemi põhjustel saate uurida ka süsteemi logifaili, näiteks /var/log/messages või muud sarnast.
  4. Proovige kasutada selliseid tööriistu nagu htop, et kontrollida, milline programm võtab kogu protsessori või lukustab masina, või kontrollige, kas teie mälu, kettaruum, failikirjeldajad või mõni muu oluline ressurss on otsas.
  5. Eeldades, et probleem on mõni läbipõlenud protsess, võite alati proovida seda tappa (kasutades utiliiti pkill või kill), et MySQL töötaks normaalselt.
  6. Eeldades, et mysqld-server põhjustab probleeme, võite vastuse saamiseks käivitada käsu: mysqladmin -u root ping või mysqladmin -u root processlist .
  7. Kui probleem on MySQL-serveriga ühenduse loomisel teie kliendiprogrammiga, kontrollige, miks see ei tööta, proovige tõrkeotsingu eesmärgil saada sellest väljundit.

Samuti võiksite lugeda järgmisi MySQL-iga seotud artikleid:

  1. Õppige MySQL/MariaDB algajatele - 1. osa
  2. Kuidas jälgida MySQL/MariaDB andmebaase CentOS 7-s Netdata abil
  3. Kuidas teisaldada kõik MySQL-i andmebaasid vanalt uuele serverile
  4. Mytop - kasulik tööriist MySQL/MariaDB jõudluse jälgimiseks Linuxis
  5. 12 MySQL/MariaDB turvalisuse häid tavasid Linuxile

Lisateabe saamiseks lugege MySQLi käsiraamatut probleemide ja levinud vigade kohta. Selles on põhjalikult loetletud levinumad probleemid ja veateated, mis võivad ilmneda MySQL-i kasutamise ajal, sealhulgas need, mida oleme eespool käsitlenud ja palju muud.