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


MySQL je široko korišćen sistem upravljanja relacionim bazama podataka otvorenog koda (RDMS) u vlasništvu Oraclea. Tokom godina je bio podrazumevani izbor za veb-bazirane aplikacije i još uvek je popularan u poređenju sa drugim mašinama za baze podataka.

Pročitajte također: Kako instalirati najnoviji MySQL na RHEL/CentOS i Fedora

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

Da li vaša web lokacija ili web aplikacija pokreće MySQL? U ovom detaljnom članku ćemo objasniti kako riješiti probleme i uobičajene greške u MySQL serveru baze podataka. Opisat ćemo kako utvrditi uzroke problema i što učiniti da ih riješimo.

1. Ne mogu se povezati na lokalni MySQL server

Jedna od uobičajenih grešaka u povezivanju između klijenta i servera u MySQL-u je „GREŠKA 2002 (HY000): Ne mogu se povezati na lokalni MySQL server preko utičnice '/var/run/mysqld/mysqld.sock' (2) ”.

Ova greška ukazuje da ne postoji MySQL server (mysqld) koji radi na host sistemu ili da ste naveli pogrešno ime datoteke Unix socketa ili TCP/IP< port kada pokušavate da se povežete sa serverom.

Uvjerite se da server radi tako što ćete provjeriti proces pod nazivom mysqld na vašem host serveru baze podataka koristeći komandu ps i komandu grep zajedno kao što je prikazano.

ps xa | grep mysqld | grep -v mysqld

Ako gornje naredbe ne pokazuju nikakav izlaz, onda poslužitelj baze podataka ne radi. Stoga se klijent ne može povezati s njim. Da pokrenete server, pokrenite sljedeću naredbu systemctl.

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

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

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

Iz izlaza gornje naredbe, usluga MySQL nije uspjela. U tom slučaju možete ga pokušati ponovo pokrenuti i još jednom provjeriti njegov status.

sudo systemctl restart mysql
sudo systemctl status mysql

Osim toga, ako server radi kao što je prikazano sljedećom naredbom, ali i dalje vidite gornju grešku, također biste trebali provjeriti da je TCP/IP port blokiran od strane firewall-a ili bilo koje usluge blokiranja portova .

ps xa | grep mysqld | grep -v mysqld

Da biste pronašli port na kojem server sluša, koristite naredbu netstat kao što je prikazano.

sudo netstat -tlpn | grep "mysql"

2. Ne mogu se povezati na MySQL server

Još jedna uobičajena greška u vezi je „(2003) Ne mogu se povezati s MySQL serverom na ‘serveru’ (10061)”, što znači da je mrežna veza odbijena.

Ovdje počnite tako što ćete provjeriti da li na sistemu radi MySQL server kao što je prikazano iznad. Također osigurajte da server ima omogućene mrežne veze i da je mrežni port koji koristite za povezivanje onaj koji je konfiguriran na serveru.

Druge uobičajene greške na koje ćete vjerovatno naići kada pokušate da se povežete na MySQL server 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)

Ove greške ukazuju na to da server možda radi, međutim, pokušavate da se povežete koristeći TCP/IP port, imenovani pipe ili Unix socket fajl koji se razlikuje od onog na kojem server sluša.

3. Pristup odbijenim greškama u MySQL

U MySQL, korisnički račun je definiran u smislu korisničkog imena i klijentskog hosta ili hostova sa kojih se korisnik može povezati na server. Osim toga, račun može imati i vjerodajnice za autentifikaciju kao što je lozinka.

Iako postoji mnogo različitih uzroka grešaka “Pristup odbijen”, jedan od uobičajenih uzroka je vezan za MySQL naloge koje server dozvoljava klijentskim programima da koriste prilikom povezivanja. To ukazuje da korisničko ime navedeno u vezi nema privilegije za pristup bazi podataka.

MySQL omogućava kreiranje naloga koji omogućavaju korisnicima klijenta da se povežu na server i pristupe podacima kojima server upravlja. S tim u vezi, ako naiđete na grešku odbijenog pristupa, provjerite da li je korisničkom računu dozvoljeno da se poveže na server preko klijentskog programa koji koristite, a moguće i hosta s kojeg dolazi konekcija .

Možete vidjeti koje privilegije ima dati 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 udaljenoj IP adresi koristeći sljedeće naredbe u MySQL ljusci.

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

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

4. Izgubljena veza sa MySQL serverom

Ovu grešku možete naići zbog jednog od sljedećih razloga: loše mrežne veze, ispremanje veze ili problem sa BLOB vrijednostima koje su veće od max_allowed_packet. U slučaju problema sa mrežnom vezom, uvjerite se da imate dobru mrežnu vezu, posebno ako pristupate udaljenom poslužitelju baze podataka.

Ako je problem timeout veze, posebno kada MySQL pokušava koristiti početnu vezu sa serverom, povećajte vrijednost parametra connect_timeout . Ali u slučaju BLOB vrijednosti koje su veće od max_allowed_packet, morate postaviti višu vrijednost za max_allowed_packet u vašem /etc /my.cnf konfiguracijski fajl u [mysqld] ili [client] odjeljku kao što je prikazano.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ako vam konfiguracijski fajl MySQL nije dostupan, tada možete postaviti ovu vrijednost koristeći sljedeću naredbu 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 grešku “previše veza”, to znači da sve dostupne veze koriste drugi klijenti. Broj konekcija (podrazumevano je 151) kontroliše sistemska varijabla max_connections; možete riješiti problem povećanjem njegove vrijednosti kako biste omogućili više veza u vašem /etc/my.cnf konfiguracijskom fajlu.

[mysqld]
max_connections=1000

6. Out of Memory MySQL

U slučaju da pokrenete upit koristeći MySQL klijentski program i naiđete na dotičnu grešku, to znači da MySQL nema dovoljno memorije da pohrani cijeli rezultat upita.

Prvi korak je da osigurate da je upit ispravan, ako jeste, onda učinite sljedeće:

  • ako koristite MySQL klijent direktno, pokrenite ga sa --quick switch, da onemogućite keširane rezultate ili
  • ako koristite MyODBC drajver, konfiguracijski korisnički interfejs (UI) ima naprednu karticu za zastavice. Označite “Ne keširaj rezultat“.

Još jedan sjajan alat je, MySQL Tuner – korisna skripta koja će se povezati na MySQL server koji radi 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 MySQL optimizaciju i savjete za podešavanje performansi, pročitajte naš članak: 15 korisnih savjeta za podešavanje i optimizaciju performansi MySQL/MariaDB.

7. MySQL se stalno ruši

Ako naiđete na ovaj problem, trebali biste pokušati otkriti da li je problem u tome što MySQL server umire ili klijent ima problem. Imajte na umu da su mnogi padovi servera uzrokovani oštećenim datotekama podataka ili indeksnim datotekama.

Možete provjeriti status servera da utvrdite koliko dugo je on bio u funkciji.

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

Alternativno, pokrenite sljedeću naredbu mysqladmin da pronađete vrijeme rada MySQL servera.

sudo mysqladmin version -p 

Ostala rješenja uključuju, ali nisu ograničena na zaustavljanje MySQL servera i omogućavanje otklanjanja grešaka, a zatim ponovno pokretanje usluge. Možete pokušati napraviti probni slučaj 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 svoje druge upite:

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

Zaključak: Određivanje šta uzrokuje problem ili grešku

Iako smo pogledali neke uobičajene MySQL probleme i greške i takođe pružili načine za njihovo otklanjanje i rješavanje, najvažnija stvar kod dijagnosticiranja greške je razumijevanje šta ona znači (u smislu onoga što je uzrokuje) .

Pa kako to možete odrediti? Sljedeće tačke će vas voditi kako da utvrdite šta tačno uzrokuje problem:

  1. Prvi i najvažniji korak je da pogledate MySQL dnevnike koji su pohranjeni u direktoriju /var/log/mysql/. Možete koristiti uslužne programe komandne linije kao što je tail za čitanje datoteka dnevnika.
  2. Ako MySQL servis ne uspije da se pokrene, provjerite njegov status koristeći systemctl ili koristite naredbu journetctl (sa -xe zastavicom) naredbu pod systemd da biste ispitali problem.
  3. Također možete ispitati sistemsku datoteku dnevnika kao što je /var/log/messages ili slično za razloge vašeg problema.
  4. Pokušajte koristiti alate kao što su Mytop, glances, top, ps ili htop da provjerite koji program zauzima sav CPU ili zaključava mašinu ili da provjerite da li vam ponestaje memorije, prostora na disku, deskriptora datoteka ili nekog drugog važnog resursa .
  5. Pod pretpostavkom da je problem neki nestalni proces, uvijek možete pokušati da ga ubijete (koristeći pkill ili kill uslužni program) tako da MySQL radi normalno.
  6. Pod pretpostavkom da mysqld server uzrokuje probleme, možete pokrenuti naredbu: mysqladmin -u root ping ili mysqladmin -u root processlist da biste dobili bilo koju odgovor od toga.
  7. Ako je problem sa vašim klijentskim programom dok pokušavate da se povežete na MySQL server, proverite zašto ne radi dobro, pokušajte da dobijete bilo kakav izlaz iz njega u svrhu rešavanja problema.

Možda biste željeli pročitati i ove sljedeće članke vezane za MySQL:

  1. Naučite MySQL/MariaDB za početnike – 1. dio
  2. Kako pratiti MySQL/MariaDB baze podataka koristeći Netdata na CentOS 7
  3. Kako prenijeti sve MySQL baze podataka sa starog na novi server
  4. Mytop – Koristan alat za praćenje performansi MySQL/MariaDB u Linuxu
  5. 12 MySQL/MariaDB sigurnosnih najboljih praksi za Linux

Za više informacija, konsultujte MySQL Referentni priručnik o problemima i uobičajenim greškama, on sveobuhvatno navodi uobičajene probleme i poruke o greškama na koje možete naići dok koristite MySQL, uključujući one o kojima smo raspravljali gore i još mnogo toga.