Užitočné tipy na riešenie bežných chýb v MySQL


MySQL je široko používaný open source systém správy relačných databáz (RDMS), ktorý vlastní Oracle. V priebehu rokov bol predvolenou voľbou pre webové aplikácie a stále zostáva populárny v porovnaní s inými databázovými strojmi.

Prečítajte si tiež: Ako nainštalovať najnovšiu MySQL na RHEL/CentOS a Fedora

MySQL bol navrhnutý a optimalizovaný pre webové aplikácie – tvorí neoddeliteľnú súčasť hlavných webových aplikácií, ako sú Facebook, Twitter, Wikipedia, YouTube a mnoho ďalších.

Používa vaša stránka alebo webová aplikácia technológiu MySQL? V tomto podrobnom článku vysvetlíme, ako riešiť problémy a bežné chyby na databázovom serveri MySQL. Popíšeme, ako zistiť príčiny problémov a čo robiť na ich vyriešenie.

1. Nedá sa pripojiť k lokálnemu serveru MySQL

Jednou z bežných chýb pripojenia klienta k serveru v MySQL je „CHYBA 2002 (HY000): Nedá sa pripojiť k lokálnemu serveru MySQL cez socket '/var/run/mysqld/mysqld.sock' (2) “.

Táto chyba naznačuje, že na hostiteľskom systéme nie je spustený žiadny MySQL server (mysqld) alebo že ste zadali nesprávny názov súboru soketu Unix alebo TCP/IP< pri pokuse o pripojenie k serveru.

Skontrolujte, či je server spustený, skontrolovaním procesu s názvom mysqld na hostiteľovi databázového servera pomocou príkazu ps a príkazu grep spolu, ako je znázornené.

ps xa | grep mysqld | grep -v mysqld

Ak vyššie uvedené príkazy nezobrazujú žiadny výstup, databázový server nie je spustený. Klient sa teda k nemu nemôže pripojiť. Ak chcete spustiť server, spustite nasledujúci príkaz systemctl.

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

Ak chcete overiť stav služby MySQL, použite nasledujúci príkaz.

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

Z výstupu vyššie uvedeného príkazu zlyhala služba MySQL. V takom prípade ho môžete skúsiť reštartovať a ešte raz skontrolovať jeho stav.

sudo systemctl restart mysql
sudo systemctl status mysql

Okrem toho, ak server beží tak, ako ukazuje nasledujúci príkaz, ale stále sa vám zobrazuje vyššie uvedená chyba, mali by ste tiež overiť, že port TCP/IP je blokovaný bránou firewall alebo akoukoľvek službou blokovania portov .

ps xa | grep mysqld | grep -v mysqld

Ak chcete nájsť port, na ktorom server počúva, použite príkaz netstat podľa obrázka.

sudo netstat -tlpn | grep "mysql"

2. Nedá sa pripojiť k serveru MySQL

Ďalšou často sa vyskytujúcou chybou pripojenia je „(2003) Nedá sa pripojiť k serveru MySQL na „serveri“ (10061) “, čo znamená, že sieťové pripojenie bolo odmietnuté.

Tu začnite kontrolou, či je v systéme spustený server MySQL, ako je uvedené vyššie. Tiež skontrolujte, či má server povolené sieťové pripojenia a či sieťový port, ktorý používate na pripojenie, je nakonfigurovaný na serveri.

Ďalšie bežné chyby, s ktorými sa pravdepodobne stretnete pri pokuse o pripojenie k serveru MySQL, sú:

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)

Tieto chyby naznačujú, že server môže byť spustený, ale vy sa pokúšate pripojiť pomocou portu TCP/IP, pomenovaného kanála alebo súboru soketu Unix, ktorý sa líši od toho, na ktorom server počúva.

3. Chyby odmietnutia prístupu v MySQL

V MySQL je používateľský účet definovaný z hľadiska používateľského mena a klientskeho hostiteľa alebo hostiteľov, z ktorých sa používateľ môže pripojiť k serveru. Okrem toho môže mať účet aj overovacie poverenia, ako napríklad heslo.

Hoci existuje mnoho rôznych príčin chýb „Prístup odmietnutý “, jedna z bežných príčin súvisí s účtami MySQL, ktoré server povoľuje klientskym programom používať pri pripájaní. Znamená to, že používateľské meno zadané v pripojení nemá oprávnenia na prístup k databáze.

MySQL umožňuje vytváranie účtov, ktoré umožňujú klientskym používateľom pripojiť sa k serveru a pristupovať k údajom spravovaným serverom. V tejto súvislosti, ak narazíte na chybu odmietnutia prístupu, skontrolujte, či má používateľský účet povolené pripojiť sa k serveru prostredníctvom klientskeho programu, ktorý používate, a prípadne aj hostiteľa, z ktorého pripojenie prichádza .

Ak chcete zistiť, aké privilégiá má daný účet, spustite príkaz SHOW GRANTS podľa obrázka.

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

Pomocou nasledujúcich príkazov v prostredí MySQL môžete udeliť privilégiá konkrétnemu používateľovi v konkrétnej databáze na vzdialenú adresu IP.

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

Okrem toho Chyby odmietnutia prístupu môžu tiež vyplynúť z problémov s pripojením k MySQL, pozrite si predtým vysvetlené chyby.

4. Stratené pripojenie k serveru MySQL

Táto chyba sa môže vyskytnúť v dôsledku jedného z nasledujúcich dôvodov: slabé pripojenie k sieti, časový limit pripojenia alebo problém s hodnotami BLOB, ktoré sú väčšie ako max_allowed_packet. V prípade problému so sieťovým pripojením sa uistite, že máte dobré sieťové pripojenie, najmä ak pristupujete na vzdialený databázový server.

Ak ide o problém s časovým limitom pripojenia, najmä ak sa MySQL pokúša použiť počiatočné pripojenie k serveru, zvýšte hodnotu parametra connect_timeout . Ale v prípade hodnoty BLOB, ktoré sú väčšie ako max_allowed_packet, musíte nastaviť vyššiu hodnotu pre max_allowed_packet v /etc /my.cnf v sekcii [mysqld] alebo [client], ako je znázornené.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Ak konfiguračný súbor MySQL nie je pre vás dostupný, môžete túto hodnotu nastaviť pomocou nasledujúceho príkazu v prostredí MySQL.

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

5. Príliš veľa pripojení MySQL

V prípade, že klient MySQL narazí na chybu „príliš veľa pripojení “, znamená to, že všetky dostupné pripojenia používajú iní klienti. Počet pripojení (predvolená hodnota je 151) je riadený systémovou premennou max_connections; problém môžete vyriešiť zvýšením jeho hodnoty, aby ste umožnili viac pripojení v konfiguračnom súbore /etc/my.cnf.

[mysqld]
max_connections=1000

6. Nedostatok pamäte MySQL

Ak spustíte dotaz pomocou klientskeho programu MySQL a narazíte na príslušnú chybu, znamená to, že MySQL nemá dostatok pamäte na uloženie celého výsledku dotazu.

Prvým krokom je uistiť sa, že dotaz je správny, ak áno, potom postupujte takto:

  • ak používate priamo klienta MySQL, spustite ho pomocou --quick switch, čím zakážete výsledky uložené vo vyrovnávacej pamäti alebo
  • ak používate ovládač MyODBC, konfiguračné používateľské rozhranie (UI) má rozšírenú kartu pre príznaky. Začiarknite políčko „Neukladať výsledok do vyrovnávacej pamäte“.

Ďalším skvelým nástrojom je MySQL Tuner – užitočný skript, ktorý sa pripojí k spustenému serveru MySQL a poskytuje návrhy, ako ho nakonfigurovať na vyšší výkon.

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

Tipy na optimalizáciu a ladenie výkonu MySQL nájdete v našom článku: 15 užitočných tipov na ladenie a optimalizáciu výkonu MySQL/MariaDB.

7. MySQL neustále padá

Ak sa stretnete s týmto problémom, mali by ste sa pokúsiť zistiť, či je problém v tom, že server MySQL vypadol, alebo či ide o klienta s problémom. Všimnite si, že mnohé zlyhania servera sú spôsobené poškodenými dátovými súbormi alebo indexovými súbormi.

Môžete skontrolovať stav servera a zistiť, ako dlho je v prevádzke.

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

Prípadne spustite nasledujúci príkaz mysqladmin a zistite dostupnosť servera MySQL.

sudo mysqladmin version -p 

Medzi ďalšie riešenia patrí okrem iného zastavenie MySQL servera a povolenie ladenia a následné opätovné spustenie služby. Môžete sa pokúsiť vytvoriť testovací prípad, ktorý sa dá použiť na zopakovanie problému. Okrem toho otvorte ďalšie okno terminálu a spustite nasledujúci príkaz, aby ste zobrazili štatistiku procesov MySQL, kým budete spúšťať svoje ďalšie dotazy:

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

Zrátané a podčiarknuté: Určenie toho, čo spôsobuje problém alebo chybu

Aj keď sme sa zamerali na niektoré bežné problémy a chyby MySQL a poskytli sme aj spôsoby ich odstraňovania a riešenia, najdôležitejšou vecou pri diagnostike chyby je pochopiť, čo to znamená (z hľadiska toho, čo ju spôsobuje). .

Ako to teda môžete určiť? Nasledujúce body vám pomôžu zistiť, čo presne spôsobuje problém:

  1. Prvým a najdôležitejším krokom je pozrieť sa do MySQL logov, ktoré sú uložené v adresári /var/log/mysql/. Na čítanie protokolových súborov môžete použiť pomocné programy príkazového riadka, ako napríklad chvost.
  2. Ak sa služba MySQL nespustí, skontrolujte jej stav pomocou systemctl alebo použite príkaz journetctl (s príznakom -xe) pod systemd na preskúmanie problému.
  3. Môžete tiež preskúmať systémový protokolový súbor, ako napríklad /var/log/messages alebo podobný, aby ste zistili dôvody svojho problému.
  4. Skúste použiť nástroje ako Mytop, pohľady, top, ps alebo htop, aby ste skontrolovali, ktorý program zaberá celý procesor alebo blokuje počítač, alebo skontrolujte, či vám dochádza pamäť, miesto na disku, deskriptory súborov alebo nejaký iný dôležitý zdroj. .
  5. Za predpokladu, že tento problém je nejaký utečený proces, vždy sa ho môžete pokúsiť zabiť (pomocou nástroja pkill alebo kill), aby MySQL fungovalo normálne.
  6. Za predpokladu, že server mysqld spôsobuje problémy, môžete spustiť príkaz: mysqladmin -u root ping alebo mysqladmin -u root processlist a získať odpoveď z nej.
  7. Ak je problém vo vašom klientskom programe pri pokuse o pripojenie k serveru MySQL, skontrolujte, prečo nefunguje správne, skúste z neho získať akýkoľvek výstup na účely riešenia problémov.

Môžete si tiež prečítať nasledujúce články súvisiace s MySQL:

  1. Naučte sa MySQL/MariaDB pre začiatočníkov – časť 1
  2. Ako monitorovať databázy MySQL/MariaDB pomocou Netdata na CentOS 7
  3. Ako preniesť všetky databázy MySQL zo starého na nový server
  4. Mytop – Užitočný nástroj na monitorovanie výkonu MySQL/MariaDB v Linuxe
  5. 12 Najlepšie postupy zabezpečenia MySQL/MariaDB pre Linux

Ďalšie informácie nájdete v referenčnej príručke MySQL týkajúcej sa problémov a bežných chýb, ktorá obsahuje úplný zoznam bežných problémov a chybových hlásení, s ktorými sa môžete stretnúť pri používaní MySQL, vrátane tých, o ktorých sme hovorili vyššie, a ďalších.