MySQL je široce používaný open source systém pro správu relačních databází (RDMS ) ve vlastnictví 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.
MySQL byl navržen a optimalizován pro webové aplikace – tvoří nedílnou součást hlavních webových aplikací, jako je Facebook , Twitter , Wikipedie , YouTube a mnoho dalších.
Jsou vaše stránky nebo webová aplikace založeny na MySQL ? V tomto podrobném článku vysvětlíme, jak řešit problémy a běžné chyby v MySQL databázový server. Popíšeme, jak zjistit příčiny problémů a co dělat pro jejich vyř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 neexistuje MySQL server (mysqld)
běžící na hostitelském systému 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ý, a to kontrolou procesu s názvem mysqld
na hostiteli databázového serveru pomocí příkazů ps a grep společně, jak je znázorněno.
$ ps xa | grep mysqld | grep -v mysqld
Pokud výše uvedené příkazy neukazují žá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 MySQL service status, 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 je MySQL služba selhala. 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 TCP/IP port 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 připojení k síti bylo odmítnuto.
Zde začněte kontrolou, zda existuje MySQL server běžící v systému, 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 na serveru nakonfigurován.
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 pokoušíte se připojit pomocí TCP/IP port, pojmenovaná roura nebo soubor soketu Unix, který se liší od souboru, na kterém server naslouchá.
3. Access Denied Errors v MySQL
V MySQL , je uživatelský účet definován pomocí uživatelského jména a klientský hostitel 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.
Přestože existuje mnoho různých příčin „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í. Označuje toto 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í klientů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řístup , 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í.
Spuštěním SHOW GRANTS
můžete zjistit, jaká oprávnění má daný účet příkaz, jak je znázorněno.
> SHOW GRANTS FOR 'tecmint'@'localhost';
Můžete udělit oprávnění konkrétnímu uživateli v konkrétní databázi ke vzdálené IP adrese pomocí následujících příkazů v prostředí MySQL.
> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100'; > flush privileges;
Navíc chyby s odepřením přístupu může 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šel časový limit připojení nebo problém s BLOB hodnoty, 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 vypršel časový limit připojení problém, zvláště když MySQL se pokouší použít počáteční připojení k serveru, zvyšte hodnotu connect_timeout parametr. Ale v případě hodnot BLOB které jsou větší než max_allowed_packet , musíte pro max_allowed_packet nastavit vyšší hodnotu ve vašem /etc/my.cnf konfigurační soubor pod [mysqld]
nebo [client]
sekce, jak je znázorněno.
[mysqld] connect_timeout=100 max_allowed_packet=500M
Pokud MySQL konfigurační soubor pro vás není přístupný, pak 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ě MySQL klient narazí na „příliš mnoho připojení “, znamená to, že všechna dostupná připojení jsou používána jinými klienty. Počet připojení (výchozí je 151 ) se ovládá pomocí max_connections
systémová proměnná; problém můžete napravit zvýšením jeho hodnoty, abyste umožnili více připojení v /etc/my.cnf konfigurační soubor.
[mysqld] max_connections=1000
6. Nedostatek paměti MySQL
V případě, že spustíte dotaz pomocí MySQL klientský program a dojde k dané chybě, 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
, zakázat výsledky uložené v mezipaměti nebo - pokud používáte MyODBC konfiguračního uživatelského rozhraní (UI) má pokročilou záložku pro příznaky. Zaškrtněte políčko „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 lze nakonfigurovat pro vyšší výkon.
$ sudo apt-get install mysqltuner #Debian/Ubuntu $ sudo yum install mysqltuner #RHEL/CentOS/Fedora $ mysqltuner
Tipy pro optimalizaci a ladění výkonu 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 narazíte na tento problém, měli byste se pokusit zjistit, zda problém spočívá v MySQL server zemře nebo zda má problém u klienta. 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 server a povolení ladění, poté službu znovu spusťte. 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
Ačkoli jsme se podívali na některé běžné MySQL problémů a chyb a také poskytnutých způsobů, jak je řešit a ř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:
- Prvním a nejdůležitějším krokem je podívat se do protokolů MySQL, 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. - Pokud se služba MySQL nespustí, zkontrolujte její stav pomocí systemctl nebo použijte journetctl (pomocí
-xe
flag) příkaz pod systemd k prozkoumání problému. - Můžete také prozkoumat soubor protokolu systému, jako je
/var/log/messages
nebo podobné z důvodů vašeho problému. - 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 jiné jiný důležitý zdroj.
- Za předpokladu, že se jedná o nějaký nekontrolovaný proces, můžete jej vždy zkusit zabít (pomocí nástroje pkill nebo kill), aby MySQL fungovalo normálně.
- Předpokládejme, že mysqld server způsobuje problémy, můžete spustit příkaz:
mysqladmin -u root ping
nebomysqladmin -u root processlist
získat od něj jakoukoli odpověď. - 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:
- Naučte se MySQL / MariaDB pro začátečníky – část 1
- Jak monitorovat databáze MySQL/MariaDB pomocí Netdata na CentOS 7
- Jak přenést všechny databáze MySQL ze starého na nový server
- Mytop – Užitečný nástroj pro monitorování výkonu MySQL/MariaDB v Linuxu
- 12 doporučených postupů 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, o kterých jsme hovořili výše, a dalších.