Hyödyllisiä vinkkejä MySQL:n yleisten virheiden vianmääritykseen


MySQL on laajalti käytetty avoimen lähdekoodin relaatiotietokannan hallintajärjestelmä (RDMS), jonka omistaa Oracle. Se on vuosien ajan ollut oletusvalinta web-pohjaisille sovelluksille ja on edelleen suosittu verrattuna muihin tietokantakoneisiin.

Lue myös: Uusimman MySQL:n asentaminen RHEL/CentOS:ään ja Fedoraan

MySQL on suunniteltu ja optimoitu verkkosovelluksille – se on olennainen osa suuria verkkopohjaisia sovelluksia, kuten Facebook, Twitter, Wikipedia, YouTube ja monet muut.

Toimiiko sivustosi tai verkkosovelluksesi MySQL? Tässä yksityiskohtaisessa artikkelissa selitämme, kuinka voit ratkaista MySQL-tietokantapalvelimen ongelmia ja yleisiä virheitä. Kuvaamme, kuinka ongelmien syyt voidaan määrittää ja mitä tehdä niiden ratkaisemiseksi.

1. Ei voi muodostaa yhteyttä paikalliseen MySQL-palvelimeen

Yksi MySQL:n yleisimmistä asiakkaiden ja palvelinten välisistä yhteysvirheistä on "VIRHE 2002 (HY000): Ei voi muodostaa yhteyttä paikalliseen MySQL-palvelimeen pistokkeen '/var/run/mysqld/mysqld.sock' kautta (2) . ".

Tämä virhe osoittaa, että isäntäjärjestelmässä ei ole käynnissä MySQL-palvelinta (mysqld) tai että olet määrittänyt väärän Unix-socket-tiedoston nimen tai TCP/IP<.-porttiin, kun yrität muodostaa yhteyden palvelimeen.

Varmista, että palvelin on käynnissä, tarkistamalla tietokantapalvelimesi isännässä prosessi nimeltä mysqld käyttämällä ps-komentoa ja grep-komentoa yhdessä kuvan mukaisesti.

ps xa | grep mysqld | grep -v mysqld

Jos yllä olevat komennot eivät näytä tulostetta, tietokantapalvelin ei ole käynnissä. Siksi asiakas ei voi muodostaa yhteyttä siihen. Käynnistä palvelin suorittamalla seuraava systemctl-komento.

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

Tarkista MySQL-palvelun tila käyttämällä seuraavaa komentoa.

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

Yllä olevan komennon tulosten perusteella MySQL-palvelu on epäonnistunut. Tässä tapauksessa voit yrittää käynnistää sen uudelleen ja tarkistaa sen tilan vielä kerran.

sudo systemctl restart mysql
sudo systemctl status mysql

Lisäksi, jos palvelin toimii seuraavan komennon osoittamalla tavalla, mutta näet silti yllä olevan virheen, sinun tulee myös varmistaa, että palomuuri tai mikä tahansa portin estopalvelu on estänyt TCP/IP-portin. .

ps xa | grep mysqld | grep -v mysqld

Käytä netstat-komentoa kuvan osoittamalla tavalla löytääksesi portin, jota palvelin kuuntelee.

sudo netstat -tlpn | grep "mysql"

2. Ei voi muodostaa yhteyttä MySQL-palvelimeen

Toinen usein havaittu yhteysvirhe on "(2003) Ei voi muodostaa yhteyttä MySQL-palvelimeen palvelimella (10061)", mikä tarkoittaa, että verkkoyhteys on evätty.

Aloita tässä tarkistamalla, että järjestelmässä on käynnissä MySQL-palvelin yllä olevan kuvan mukaisesti. Varmista myös, että palvelimessa on verkkoyhteydet käytössä ja että verkkoportti, jota käytät yhteyden muodostamiseen, on se, joka on määritetty palvelimelle.

Muita yleisiä virheitä, joita todennäköisesti kohtaat yrittäessäsi muodostaa yhteyttä MySQL-palvelimeen, ovat:

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)

Nämä virheet osoittavat, että palvelin saattaa olla käynnissä, mutta yrität muodostaa yhteyden käyttämällä TCP/IP-porttia, nimeltä putkea tai Unix-kantatiedostoa, joka on eri kuin se, jota palvelin kuuntelee.

3. Pääsy kielletty -virheisiin MySQL:ssä

MySQL:ssä käyttäjätili määritellään käyttäjänimellä ja asiakaspalvelimella tai isännillä, joista käyttäjä voi muodostaa yhteyden palvelimeen. Lisäksi tilillä voi olla myös todennustietoja, kuten salasana.

Vaikka Pääsy kielletty -virheille on monia eri syitä, yksi yleisimmistä syistä liittyy MySQL-tileihin, joita palvelin sallii asiakasohjelmien käyttää yhteyden muodostamisen yhteydessä. Se osoittaa, että yhteydessä määritetyllä käyttäjänimellä ei ole oikeuksia käyttää tietokantaa.

MySQL mahdollistaa tilien luomisen, joiden avulla asiakaskäyttäjät voivat muodostaa yhteyden palvelimeen ja käyttää palvelimen hallinnoimia tietoja. Jos kohtaat pääsy estetty -virheen, tarkista, saako käyttäjätili muodostaa yhteyden palvelimeen käyttämäsi asiakasohjelman kautta ja mahdollisesti isäntä, josta yhteys tulee. .

Näet tietyn tilin oikeudet suorittamalla komennon SHOW GRANTS kuvan mukaisesti.

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

Voit myöntää oikeudet tietylle käyttäjälle tietyssä tietokannassa etä-ip-osoitteeseen käyttämällä seuraavia MySQL-kuoren komentoja.

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

Lisäksi pääsy estetty -virheet voivat johtua myös MySQL-yhteyden muodostamisongelmista. Katso edellä kuvatut virheet.

4. Yhteys MySQL Serveriin katkesi

Saatat kohdata tämän virheen jostakin seuraavista syistä: huono verkkoyhteys, yhteyden aikakatkaisu tai ongelma BLOB-arvoissa, jotka ovat suurempia kuin max_allowed_packet. Jos verkkoyhteysongelma ilmenee, varmista, että sinulla on hyvä verkkoyhteys, varsinkin jos käytät etätietokantapalvelinta.

Jos kyseessä on yhteyden aikakatkaisu-ongelma, erityisesti kun MySQL yrittää käyttää ensimmäistä yhteyttä palvelimeen, lisää connect_timeout-parametrin arvoa. . Mutta jos BLOB-arvot ovat suurempia kuin max_allowed_packet, sinun on asetettava suurempi arvo max_allowed_packet-arvolle tiedostossa /etc. /my.cnf-määritystiedosto [mysqld]- tai [client]-osiossa kuvan mukaisesti.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Jos et voi käyttää MySQL-määritystiedostoa, voit asettaa tämän arvon käyttämällä seuraavaa komentoa MySQL-kuoressa.

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

5. Liian monta MySQL-yhteyttä

Jos MySQL-asiakasohjelma kohtaa liian monta yhteyttä -virheen, se tarkoittaa, että kaikki käytettävissä olevat yhteydet ovat muiden asiakkaiden käytössä. Yhteyksien määrää (oletus on 151) ohjaa järjestelmämuuttuja max_connections; voit korjata ongelman lisäämällä sen arvoa salliaksesi enemmän yhteyksiä /etc/my.cnf-määritystiedostossasi.

[mysqld]
max_connections=1000

6. Muisti lopussa MySQL

Jos suoritat kyselyn MySQL-asiakasohjelmalla ja kohtaat kyseessä olevan virheen, se tarkoittaa, että MySQL:llä ei ole tarpeeksi muistia koko kyselytuloksen tallentamiseen.

Ensimmäinen askel on varmistaa, että kysely on oikea. Jos on, toimi seuraavasti:

  • jos käytät MySQL-asiakasohjelmaa suoraan, käynnistä se komennolla --quick switch poistaaksesi välimuistissa olevat tulokset käytöstä tai
  • jos käytät MyODBC-ohjainta, määritysten käyttöliittymässä (UI) on edistynyt lippujen välilehti. Valitse Älä tallenna tulosta välimuistiin.

Toinen loistava työkalu on MySQL Tuner – hyödyllinen skripti, joka muodostaa yhteyden käynnissä olevaan MySQL-palvelimeen ja antaa ehdotuksia sen määrittämiseksi tehokkuutta lisääväksi.

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

Saat MySQL-optimointi- ja suorituskyvyn viritysvinkkejä artikkelistamme: 15 hyödyllistä MySQL/MariaDB Performance Tuning and Optimization -vinkkiä.

7. MySQL kaatuu jatkuvasti

Jos kohtaat tämän ongelman, sinun tulee yrittää selvittää, onko ongelma MySQL-palvelimen kuolemassa vai onko kyseessä asiakas, jolla on ongelma. Huomaa, että monet palvelimen kaatumiset johtuvat vioittuneista datatiedostoista tai hakemistotiedostoista.

Voit tarkistaa palvelimen tilan selvittääksesi, kuinka kauan se on ollut käytössä.

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

Vaihtoehtoisesti suorita seuraava mysqladmin-komento löytääksesi MySQL-palvelimen käyttöajan.

sudo mysqladmin version -p 

Muita ratkaisuja ovat muun muassa MySQL-palvelimen pysäyttäminen ja virheenkorjauksen salliminen ja palvelun käynnistäminen uudelleen. Voit yrittää tehdä testitapauksen, jonka avulla ongelma voidaan toistaa. Avaa lisäksi ylimääräinen pääteikkuna ja suorita seuraava komento näyttääksesi MySQL-prosessitilastot samalla, kun suoritat muita kyselyjäsi:

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

Bottom Line: Selvitä, mikä aiheuttaa ongelman tai virheen

Vaikka olemme tarkastelleet joitain yleisiä MySQL-ongelmia ja -virheitä ja tarjonneet myös tapoja vianmääritykseen ja niiden ratkaisemiseen, tärkeintä virheen diagnosoinnissa on ymmärtää, mitä se tarkoittaa (mitä se aiheuttaa). .

Joten miten voit määrittää tämän? Seuraavat kohdat opastavat sinua selvittämään, mikä ongelman tarkalleen aiheuttaa:

  1. Ensimmäinen ja tärkein vaihe on tarkastella MySQL-lokeja, jotka on tallennettu hakemistoon /var/log/mysql/. Voit käyttää komentorivin apuohjelmia, kuten häntää, lukeaksesi lokitiedostoja.
  2. Jos MySQL-palvelu ei käynnisty, tarkista sen tila systemctl-komennolla tai käytä journetctl-komentoa (jossa on -xe-lippu) kohdassa systemd ongelman tutkimiseen.
  3. Voit myös tutkia järjestelmän lokitiedostoa, kuten /var/log/messages tai vastaavaa ongelman syiden selvittämiseksi.
  4. Kokeile työkaluja, kuten Mytop, glances, top, ps tai htop tarkistaaksesi, mikä ohjelma vie kaiken suorittimen tai lukitsee koneen, tai tarkista, onko muisti, levytila, tiedostokuvaajat tai jokin muu tärkeä resurssi loppumassa. .
  5. Olettaen, että ongelma on jokin karannut prosessi, voit aina yrittää tappaa sen (käyttäen pkill- tai kill-apuohjelmaa), jotta MySQL toimii normaalisti.
  6. Olettaen, että mysqld-palvelin aiheuttaa ongelmia, voit suorittaa komennon: mysqladmin -u root ping tai mysqladmin -u root processlist saadaksesi minkä tahansa vastaus siitä.
  7. Jos ongelma on asiakasohjelmassasi yrittäessäsi muodostaa yhteyttä MySQL-palvelimeen, tarkista, miksi se ei toimi hyvin, yritä saada siitä mitä tahansa tulostetta vianmääritystä varten.

Saatat myös haluta lukea nämä seuraavat MySQL:ään liittyvät artikkelit:

  1. Opi MySQL/MariaDB aloittelijoille – Osa 1
  2. Kuinka seurata MySQL/MariaDB-tietokantoja Netdatan avulla CentOS 7:ssä
  3. Kuinka siirtää kaikki MySQL-tietokannat vanhasta uudelle palvelimelle
  4. Mytop – Hyödyllinen työkalu MySQL/MariaDB-suorituskyvyn seurantaan Linuxissa
  5. 12 MySQL/MariaDB-suojauksen parasta käytäntöä Linuxille

Lisätietoja on MySQL Reference -oppaassa, joka koskee ongelmia ja yleisiä virheitä. Siinä on kattavasti luettelo yleisistä ongelmista ja virheilmoituksista, joita saatat kohdata käyttäessäsi MySQL:ä, mukaan lukien ne, joista olemme käsitelleet yllä ja paljon muuta.