Korisni savjeti za rješavanje uobičajenih pogrešaka u MySQL-u


MySQL je široko korišteni sustav upravljanja relacijskim bazama podataka otvorenog koda (RDMS) u vlasništvu Oraclea. Tijekom godina bio je zadani izbor za internetske aplikacije i dalje je popularan u usporedbi s drugim mehanizmima baza podataka.

MySQL je dizajniran i optimiziran za web aplikacije - čini sastavni dio glavnih web aplikacija, kao što su Facebook, Twitter, Wikipedia, YouTube i mnogi drugi.

Pokreće li vašu web lokaciju ili web aplikaciju MySQL? U ovom detaljnom članku objasnit ćemo kako otkloniti probleme i uobičajene pogreške na MySQL poslužitelju baze podataka. Opisat ćemo kako utvrditi uzroke problema i što učiniti za njihovo rješavanje.

1. Ne mogu se povezati s lokalnim MySQL poslužiteljem

Jedna od uobičajenih pogrešaka povezivanja klijenta i poslužitelja u MySQL-u je "POGREŠKA 2002 (HY000): Ne može se povezati s lokalnim MySQL poslužiteljem putem utičnice" /var/run/mysqld/mysqld.sock '(2) ".

Ova pogreška ukazuje na to da se na host sustavu ne izvodi MySQL poslužitelj (mysqld) ili da ste pri pokušaju povezivanja s poslužiteljem naveli pogrešno ime datoteke Unix utičnice ili TCP/IP port.

Osigurajte da je poslužitelj pokrenut provjerom postupka nazvanog mysqld na vašem računalu poslužitelja baze podataka koristeći zajedno grep naredbu kao što je prikazano.

$ ps xa | grep mysqld | grep -v mysqld

Ako gornje naredbe ne pokazuju izlaz, tada poslužitelj baze podataka nije pokrenut. Stoga se klijent ne može povezati s njim. Da biste pokrenuli poslužitelj, pokrenite sljedeću naredbu systemctl.

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

Da biste provjerili status MySQL usluge, upotrijebite sljedeću naredbu.

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

Iz rezultata gornje naredbe usluga MySQL nije uspjela. U takvom slučaju možete ga pokušati ponovno pokrenuti i još jednom provjeriti njegov status.

$ sudo systemctl restart mysql
$ sudo systemctl status mysql

Osim toga, ako se poslužitelj izvodi na način prikazan sljedećom naredbom, ali i dalje vidite gornju pogrešku, trebali biste također provjeriti je li TCP/IP priključak blokiran vatrozidom ili bilo kojom uslugom za blokiranje priključaka.

$ ps xa | grep mysqld | grep -v mysqld

Za naredbu netstat kako je prikazano.

$ sudo netstat -tlpn | grep "mysql"

2. Ne mogu se povezati s MySQL poslužiteljem

Sljedeća često naišla pogreška u povezivanju je "(2003) Ne može se povezati s MySQL poslužiteljem na" poslužitelju "(10061)", što znači da je mrežna veza odbijena.

Ovdje započnite provjerom postoji li MySQL poslužitelj pokrenut u sustavu kao što je prikazano gore. Također osigurajte da su na poslužitelju omogućene mrežne veze i da je mrežni priključak koji koristite za povezivanje onaj konfiguriran na poslužitelju.

Ostale uobičajene pogreške na koje ćete vjerojatno naići prilikom pokušaja povezivanja s MySQL poslužiteljem su:

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)

Te pogreške ukazuju na to da se poslužitelj možda izvodi, međutim, pokušavate se povezati pomoću TCP/IP priključka, imenovane cijevi ili Unix socket datoteke koja se razlikuje od one na kojoj poslužitelj sluša.

3. Pristupiti odbijenim greškama u MySQL-u

U MySQL-u je korisnički račun definiran u smislu korisničkog imena i klijentskog domaćina ili hostova s kojih se korisnik može povezati s poslužiteljem. Osim toga, račun također može imati vjerodajnice za provjeru autentičnosti, poput lozinke.

Iako postoji mnogo različitih uzroka pogrešaka "Pristup odbijen", jedan od najčešćih uzroka odnosi se na MySQL račune koje poslužitelj dopušta klijentskim programima prilikom povezivanja. Označava da korisničko ime navedeno u vezi nema povlastice za pristup bazi podataka.

MySQL omogućuje stvaranje računa koji omogućavaju klijentima da se povežu s poslužiteljem i pristupe podacima kojima upravlja poslužitelj. S tim u vezi, ako naiđete na pogrešku zabranjenog pristupa, provjerite smije li se korisnički račun povezati s poslužiteljem putem klijentskog programa koji koristite i eventualno hosta s kojeg dolazi veza.

Možete vidjeti koje privilegije ima određeni račun pokretanjem naredbe SHOW GRANTS , kao što je prikazano.

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

Možete dodijeliti privilegije određenom korisniku na određenoj bazi podataka na udaljenu ip adresu pomoću sljedećih naredbi u ljusci MySQL.

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

Nadalje, pogreške odbijenog pristupa mogu također nastati kao rezultat problema s povezivanjem na MySQL, pogledajte prethodno objašnjene pogreške.

4. Izgubljena veza s MySQL poslužiteljem

Na ovu pogrešku možete naići iz jednog od sljedećih razloga: slaba mrežna povezanost, vremensko ograničenje veze ili problem s BLOB vrijednostima koje su veće od max_allowed_packet. U slučaju problema s mrežnom vezom, osigurajte dobru mrežnu vezu, posebno ako pristupate udaljenom poslužitelju baze podataka.

Ako je problem s vremenom čekanja veze, posebno kada MySQL pokušava koristiti početnu vezu s poslužiteljem, povećajte vrijednost parametra connect_timeout. Ali u slučaju BLOB vrijednosti koje su veće od max_allowed_packet, morate postaviti veću vrijednost za max_allowed_packet u svojoj /etc/my.cnf konfiguracijskoj datoteci pod [mysqld] ili [client] odjeljak kao što je prikazano.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ako vam MySQL konfiguracijska datoteka nije dostupna, tada ovu vrijednost možete postaviti pomoću sljedeće naredbe u MySQL ljusci.

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

5. Previše MySQL veza

U slučaju da MySQL klijent naiđe na pogrešku "previše veza", to znači da sve dostupne veze koriste drugi klijenti. Broj veza (zadana vrijednost je 151) kontrolira se sistemskom varijablom max_connections ; problem možete riješiti povećavanjem njegove vrijednosti kako biste dopustili više veza u svojoj konfiguracijskoj datoteci /etc/my.cnf.

[mysqld]
max_connections=1000

6. Nema memorije MySQL

U slučaju da pokrenete upit pomoću klijentskog programa MySQL i naiđete na dotičnu pogrešku, to znači da MySQL nema dovoljno memorije za pohranu cijelog rezultata upita.

Prvi korak je osigurati da je upit točan, ako jest, učinite sljedeće:

  • ako izravno koristite MySQL klijent, pokrenite ga s --quick switch , da biste onemogućili predmemorirane rezultate ili
  • ako koristite upravljački program MyODBC, korisničko sučelje za konfiguraciju (UI) ima naprednu karticu za zastavice. Označite "Nemoj predmemorirati rezultat".

Još jedan izvrstan alat je MySQL tuner - korisna skripta koja će se povezati s pokrenutim MySQL poslužiteljem i daje prijedloge kako se može konfigurirati za veće performanse.

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

Za savjete za optimizaciju i podešavanje izvedbe MySQL pročitajte naš članak: 15 korisnih savjeta za podešavanje i optimizaciju izvedbe MySQL/MariaDB.

7. MySQL nastavlja rušiti

Ako naiđete na ovaj problem, pokušajte otkriti je li problem u tome što MySQL poslužitelj umire ili je njegov klijent s problemom. Imajte na umu da su mnogi padovi poslužitelja uzrokovani oštećenim datotekama ili indeksnim datotekama.

Možete provjeriti status poslužitelja da biste utvrdili koliko je dugo bio aktivan i pokrenut.

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

Alternativno, pokrenite sljedeću naredbu mysqladmin da biste pronašli vrijeme rada MySQL poslužitelja.

$ sudo mysqladmin version -p 

Ostala rješenja uključuju, ali ne ograničavaju se na zaustavljanje MySQL poslužitelja i omogućavanje ispravljanja pogrešaka, a zatim ponovno pokrenite uslugu. Možete pokušati izraditi test koji se može koristiti za ponavljanje problema. Osim toga, otvorite dodatni prozor terminala i pokrenite sljedeću naredbu za prikaz statistike MySQL procesa dok izvršavate ostale upite:

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

Iako smo pregledali neke uobičajene probleme i pogreške MySQL-a i pružili načine za njihovo rješavanje i rješavanje, najvažnije kod dijagnosticiranja pogreške jest razumijevanje što ona znači (u smislu onoga što je uzrokuje).

Pa kako to možete odrediti? Sljedeće točke uputit će vas kako utvrditi što točno uzrokuje problem:

  1. Prvi i najvažniji korak je uvid u MySQL zapisnike koji su pohranjeni u direktoriju /var/log/mysql/. Možete koristiti uslužne programe naredbenog retka kao što je tail za čitanje datoteka dnevnika.
  2. Ako se MySQL usluga ne pokrene, provjerite njen status pomoću systemctl ili upotrijebite journetctl (s oznakom -xe ) pod systemd da biste ispitali problem.
  3. Također možete pregledati datoteku dnevnika sustava kao što je /var/log/messages ili slično iz razloga vašeg problema.
  4. Pokušajte upotrijebiti alate kao što je htop da provjerite koji program uzima sav CPU ili zaključava stroj ili da provjerite nedostaje li vam memorije, prostora na disku, deskriptora datoteka ili nekog drugog važnog resursa.
  5. Pod pretpostavkom da je problem neki odbjegli postupak, uvijek ga možete pokušati ubiti (pomoću uslužnog programa pkill ili kill) kako bi MySQL normalno radio.
  6. Pod pretpostavkom da mysqld poslužitelj stvara probleme, možete pokrenuti naredbu: mysqladmin -u root ping ili mysqladmin -u root rootlist da biste od njega dobili bilo kakav odgovor.
  7. Ako je problem u vašem klijentskom programu dok se pokušavate povezati s MySQL poslužiteljem, provjerite zašto ne radi dobro, pokušajte dobiti bilo kakav izlaz s njega u svrhu rješavanja problema.

Možda biste željeli pročitati i sljedeće članke povezane s MySQL-om:

  1. Naučite MySQL/MariaDB za početnike - 1. dio
  2. Kako nadzirati MySQL/MariaDB baze podataka pomoću Netdata na CentOS 7
  3. Kako prenijeti sve MySQL baze podataka sa starog na novi poslužitelj
  4. Mytop - koristan alat za praćenje MySQL/MariaDB izvedbe u Linuxu
  5. 12 najboljih primjera iz prakse MySQL/MariaDB Security za Linux

Za više informacija, obratite se referentnom priručniku MySQL u vezi s problemima i uobičajenim pogreškama, u njemu su detaljno navedeni uobičajeni problemi i poruke o pogreškama s kojima se možete susresti tijekom korištenja MySQL-a, uključujući one o kojima smo gore govorili i više.