Vyhledávání na webu

Užitečné tipy pro řešení běžných chyb v MySQL


MySQL je široce používaný open source systém pro správu relačních databází (RDMS), který vlastní Oracle. V průběhu let byl výchozí volbou pro webové aplikace a stále zůstává populární ve srovnání s jinými databázovými stroji.

Přečtěte si také: Jak nainstalovat nejnovější MySQL na RHEL/CentOS a Fedora

MySQL byl navržen a optimalizován pro webové aplikace – tvoří nedílnou součást hlavních webových aplikací, jako jsou Facebook, Twitter, Wikipedia, YouTube a mnoho dalších.

Používá váš web nebo webová aplikace MySQL? V tomto podrobném článku vysvětlíme, jak řešit problémy a běžné chyby na databázovém serveru MySQL. Popíšeme si, jak zjistit příčiny problémů a co dělat pro jejich řešení.

1. Nelze se připojit k místnímu serveru MySQL

Jednou z běžných chyb připojení klienta k serveru v MySQL je „CHYBA 2002 (HY000): Nelze se připojit k místnímu serveru MySQL přes soket '/var/run/mysqld/mysqld.sock' (2) “.

Tato chyba znamená, že na hostitelském systému není spuštěn žádný MySQL server (mysqld) nebo že jste zadali nesprávný název souboru soketu Unix nebo TCP/IP< port při pokusu o připojení k serveru.

Zkontrolujte, zda je server spuštěný, zkontrolováním procesu s názvem mysqld na hostiteli databázového serveru pomocí příkazu ps a příkazu grep společně, jak je znázorněno.

ps xa | grep mysqld | grep -v mysqld

Pokud výše uvedené příkazy nevykazují žádný výstup, pak databázový server neběží. Klient se k němu tedy nemůže připojit. Chcete-li spustit server, spusťte následující příkaz systemctl.

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

Chcete-li ověřit stav služby MySQL, použijte následující příkaz.

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

Z výstupu výše uvedeného příkazu selhala služba MySQL. V takovém případě jej můžete zkusit restartovat a zkontrolovat jeho stav ještě jednou.

sudo systemctl restart mysql
sudo systemctl status mysql

Kromě toho, pokud server běží, jak ukazuje následující příkaz, ale stále se zobrazuje výše uvedená chyba, měli byste také ověřit, že port TCP/IP je blokován bránou firewall nebo jakoukoli službou blokující porty. .

ps xa | grep mysqld | grep -v mysqld

Chcete-li najít port, na kterém server naslouchá, použijte příkaz netstat, jak je znázorněno.

sudo netstat -tlpn | grep "mysql"

2. Nelze se připojit k serveru MySQL

Další často se vyskytující chybou připojení je „(2003) Nelze se připojit k serveru MySQL na ‚server‘ (10061) “, což znamená, že síťové připojení bylo odmítnuto.

Zde začněte kontrolou, zda je v systému spuštěn server MySQL, jak je uvedeno výše. Také se ujistěte, že má server povolená síťová připojení a že síťový port, který používáte k připojení, je ten, který je nakonfigurován na serveru.

Další běžné chyby, se kterými se pravděpodobně setkáte při pokusu o připojení k serveru MySQL, jsou:

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)

Tyto chyby naznačují, že server možná běží, ale vy se pokoušíte připojit pomocí portu TCP/IP, pojmenovaného kanálu nebo souboru soketu Unix, který se liší od toho, na kterém server naslouchá.

3. Přístup k chybám odepřen v MySQL

V MySQL je uživatelský účet definován pomocí uživatelského jména a klientského hostitele nebo hostitelů, ze kterých se uživatel může připojit k serveru. Kromě toho může mít účet také ověřovací údaje, jako je heslo.

Ačkoli existuje mnoho různých příčin chyb „Přístup odepřen“, jedna z běžných příčin souvisí s účty MySQL, které server povoluje klientským programům používat při připojování. Znamená to, že uživatelské jméno zadané v připojení nemá oprávnění pro přístup k databázi.

MySQL umožňuje vytváření účtů, které umožňují klientským uživatelům připojit se k serveru a přistupovat k datům spravovaným serverem. V tomto ohledu, pokud narazíte na chybu odepření přístupu, zkontrolujte, zda se uživatelský účet může připojit k serveru prostřednictvím klientského programu, který používáte, a případně hostitele, ze kterého připojení přichází .

Oprávnění daného účtu můžete zjistit spuštěním příkazu SHOW GRANTS podle obrázku.

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

Pomocí následujících příkazů v prostředí MySQL můžete udělit oprávnění konkrétnímu uživateli na konkrétní databázi ke vzdálené IP adrese.

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

Kromě toho mohou chyby odepření přístupu také vyplývat z problémů s připojením k MySQL, viz výše vysvětlené chyby.

4. Ztracené připojení k serveru MySQL

K této chybě může dojít z jednoho z následujících důvodů: špatné připojení k síti, vypršení časového limitu připojení nebo problém s hodnotami BLOB, které jsou větší než max_allowed_packet. V případě problému s připojením k síti se ujistěte, že máte dobré připojení k síti, zejména pokud přistupujete ke vzdálenému databázovému serveru.

Pokud se jedná o problém s časovým limitem připojení, zejména když se MySQL pokouší použít počáteční připojení k serveru, zvyšte hodnotu parametru connect_timeout . Ale v případě hodnot BLOB, které jsou větší než max_allowed_packet, musíte v /etc nastavit vyšší hodnotu pro max_allowed_packet /my.cnf v sekci [mysqld] nebo [client], jak je znázorněno.

[mysqld]
connect_timeout=100
max_allowed_packet=500M

Pokud pro vás konfigurační soubor MySQL není přístupný, můžete tuto hodnotu nastavit pomocí následujícího příkazu v prostředí MySQL.

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

5. Příliš mnoho připojení MySQL

V případě, že klient MySQL narazí na chybu „příliš mnoho připojení “, znamená to, že všechna dostupná připojení používají ostatní klienti. Počet připojení (výchozí je 151) je řízen systémovou proměnnou max_connections; problém můžete napravit zvýšením jeho hodnoty, abyste umožnili více připojení v konfiguračním souboru /etc/my.cnf.

[mysqld]
max_connections=1000

6. Nedostatek paměti MySQL

Pokud spustíte dotaz pomocí klientského programu MySQL a narazíte na danou chybu, znamená to, že MySQL nemá dostatek paměti pro uložení celého výsledku dotazu.

Prvním krokem je zajistit, aby byl dotaz správný, pokud ano, proveďte následující:

  • pokud používáte přímo klienta MySQL, spusťte jej pomocí --quick switch, abyste deaktivovali výsledky uložené v mezipaměti nebo
  • pokud používáte ovladač MyODBC, konfigurační uživatelské rozhraní (UI) má pokročilou záložku pro příznaky. Zaškrtněte „Neukládat výsledek do mezipaměti“.

Dalším skvělým nástrojem je MySQL Tuner – užitečný skript, který se připojí k běžícímu serveru MySQL a poskytuje návrhy, jak jej nakonfigurovat pro vyšší výkon.

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

Tipy na optimalizaci a ladění MySQL najdete v našem článku: 15 užitečných tipů pro ladění a optimalizaci výkonu MySQL/MariaDB.

7. MySQL neustále padá

Pokud se setkáte s tímto problémem, měli byste se pokusit zjistit, zda je problém v tom, že server MySQL zemřel, nebo zda se jedná o klienta s problémem. Všimněte si, že mnoho selhání serveru je způsobeno poškozenými datovými soubory nebo indexovými soubory.

Můžete zkontrolovat stav serveru a zjistit, jak dlouho byl spuštěn a spuštěn.

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

Případně spusťte následující příkaz mysqladmin a zjistěte dobu provozu serveru MySQL.

sudo mysqladmin version -p 

Mezi další řešení patří mimo jiné zastavení MySQL serveru a povolení ladění a následné opětovné spuštění služby. Můžete zkusit vytvořit testovací případ, který lze použít k opakování problému. Kromě toho otevřete další okno terminálu a spusťte následující příkaz pro zobrazení statistik procesů MySQL, zatímco budete spouštět své další dotazy:

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

Sečteno a podtrženo: Určení toho, co způsobuje problém nebo chybu

Přestože jsme se zabývali některými běžnými problémy a chybami MySQL a také jsme poskytli způsoby, jak je odstranit a vyřešit, nejdůležitější věcí při diagnostikování chyby je pochopit, co to znamená (z hlediska toho, co ji způsobuje). .

Jak to tedy můžete určit? Následující body vás povedou k tomu, jak zjistit, co přesně způsobuje problém:

  1. Prvním a nejdůležitějším krokem je podívat se do MySQL logů, které jsou uloženy v adresáři /var/log/mysql/. Pro čtení souborů protokolu můžete použít nástroje příkazového řádku, jako je například tail.
  2. Pokud se služba MySQL nespustí, zkontrolujte její stav pomocí systemctl nebo použijte příkaz journetctl (s příznakem -xe) pod systemd a prozkoumejte problém.
  3. Důvody vašeho problému můžete také prozkoumat v souboru protokolu systému, jako je /var/log/messages nebo podobně.
  4. Zkuste použít nástroje jako Mytop, pohledy, top, ps nebo htop ke kontrole, který program zabírá veškerý CPU nebo zamyká počítač, nebo ke kontrole, zda vám nedochází paměť, místo na disku, deskriptory souborů nebo nějaký jiný důležitý zdroj. .
  5. Za předpokladu, že tento problém je nějakým nekontrolovatelným procesem, můžete jej vždy zkusit zabít (pomocí nástroje pkill nebo kill), aby MySQL fungovalo normálně.
  6. Za předpokladu, že server mysqld způsobuje problémy, můžete spustit příkaz: mysqladmin -u root ping nebo mysqladmin -u root processlist a získat odpověď z něj.
  7. Pokud je problém s vaším klientským programem při pokusu o připojení k serveru MySQL, zkontrolujte, proč nefunguje správně, zkuste z něj získat jakýkoli výstup pro účely odstraňování problémů.

Můžete si také přečíst následující články související s MySQL:

  1. Naučte se MySQL/MariaDB pro začátečníky – část 1
  2. Jak monitorovat databáze MySQL/MariaDB pomocí Netdata na CentOS 7
  3. Jak přenést všechny databáze MySQL ze starého na nový server
  4. Mytop – Užitečný nástroj pro sledování výkonu MySQL/MariaDB v Linuxu
  5. 12 Doporučené postupy zabezpečení MySQL/MariaDB pro Linux

Další informace naleznete v referenční příručce MySQL týkající se problémů a běžných chyb, která obsahuje úplný seznam běžných problémů a chybových zpráv, se kterými se můžete při používání MySQL setkat, včetně těch, které jsme probrali výše a dalších.