Debian: když vám server nakyne
Spravovat server na Debianu je zábava. Debian má vždycky něco vlastního, vždycky něco, co mě překvapí.Opět předem upozorňuji, že nejsem správce serveru, ale spíše jenom občasný dohled.
V serverově mám pronajatý jeden server, kde funguje jeden z našich projektů. Po zaplacení jsem server dostal včetně nainstalovaného Apache a MySQL databáze, které jsem si nechal na vyžádání předinstalovat.
Bohužel se jedná o dedigovaný server, který si musím spravovat sám.
Jednoho krásného podzimního dne jsem si všimnul (nebo jsem byl spíše ze serverovny upozorněn), že došlo místo na diskovém oddílu s databází.
Tohle se mi zdálo divné, protože databáze, která je na serveru má sice několik Giga, ale určitě nemůže zabírat celé diskové místo, no vlastně ani třetinu diskového prostoru na oddílu.
Samozřejmě při mém připojení byl server už dávno v “spadený” a databáze nefungovala, protože neměla kam zapisovat.
Při výpisu největších adresářů jsem zjistil, že velikost asi 16 Gb zabírá adresář /var/log/mysql, kde se logují dotazy databáze.
Bohužel server je co do databáze dosti vytěžován a dotazů na databázi probíhá každou sekundu vcelku dost (několik desítek), a tak vznikla tato situace.
Nebudu popisovat noc, kdy jsem prostoduše smazal obsah adresáře /var/log/mysql. Tuto noc si určitě zapamatuji a vícekrát stejnou blbost neudělám.
Adresář jsem smazal s předpokladem, že si losovací soubory databáze znova sama vytvoří, a bude dále bez problémů logovat. Jaké bylo mé překvapení, když nevytvořila a nelogovala.
Celou noc jsem se setkával s hláškami:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
"Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13)" "ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) " "InnoDB: Check that you do not already have another mysqld process " "Server neodpovídá (nebo není spávně nastaven lokální socket MySQL serveru)" " creating symbolic link `/var/mysql/mysql.sock' to `/tmp/mysql.sock':" "create mysql.stock" |
a podobnými. Samotný Google už nevěděl jaký výsledek a v jakém jazyce by mi nabídl, abych byl spokojený.
No každopádně, situaci se nakonec po několika hodinách podařilo napravit upgradem celé distribuce a všechno se zdálo být v pořádku.
V pořádku ale nic nebylo, protože databáze loguje dále a dále pomalu dochází místo na disku, a tak se situace musela řešit.
Náprava
Náprava je vcelku jednoduchá. Nainstalovaný databázový server je po instalaci nakonfigurována tak, aby logovala všechny dotazy a uchovávala je po dobu několika dní.
Toto jde samozřejmě upravit v konfiguraci databáze, která se nachází v /etc/mysql/my.cfg
Mou situaci šlo řešit několika způsoby, jako například vypnout úplně logování dotazů.
Já jsem nakonec zvolil změnu doby pro uchovávání logů, která je defaultně nastavena na hodnotu 10 dní.
Změna doby na 2 dny pomohla a při restartu databáze byly všechny logovací soubory, starší této doby, promazány.
1 2 3 4 |
Stav před úpravou: <em>/dev/md3 19228180 11846228 6405208 65% /var</em> Stav po změně doby: <em> /dev/md3 19228180 5401956 12849480 30% /var</em> |
Závěrem
Za nastalou situaci jsem si určitě mohl sám, naštěstí se ji podařilo vyřešit.
Co dodat?
Jenom snad že čím více začínám obdivovat správce serverů a jejich práci.
Také jsem se s tímto nedávno setkal, logy mysql nějak nakynuly, ale nic extrémního. Občas kontroluju, kolik místa je využito a náhodou jsem na tyto logy taky narazil a ihned si my.cfg změnil. 🙂