Rozbitá MySQL databáze na serveru

Na VPS manželky, kde jí běží několik webů, se zničeho nic rozpadla databáze a to tak, že kompletně. Nic jsem neměnil, neinstaloval žádné updaty. Log MySQL byl prázdný, dmesg byl plný tohoto:

[cc lang=”bash”]

[43296.690395] init: mysql main process ended, respawning
[43427.951319] init: mysql main process (31301) terminated with status 1
[43427.951369] init: mysql main process ended, respawning
[43559.203716] init: mysql main process (31364) terminated with status 1
[43559.203747] init: mysql main process ended, respawning
[43690.435408] init: mysql main process (31433) terminated with status 1
[43690.435437] init: mysql main process ended, respawning
[/cc]

Chvilku jsem trápil Google, našel nějaké zmínky o chybné volbě v konfiguračním souboru MySQL. Uvedené volby jsem tam ale vůbec neměl. Nechtěl jsem mít weby offline moc dlouho, vše jsem smazal a data obnovil ze zálohy.

Bohužel neběžely dlouho. Na druhý den stejný problém, data zase v háji. Zanadával jsem, odstranil MySQL, nainstaloval MariaDB. Díky Bohu (a mně) za zálohy. Opět obnova dat, weby běží, za hodinu zase data v tahu. Trápím Google ještě více. Přitom jsem si vzpomněl, že jsem podobný problém měl na svém servu, kde běží HamQTH. Naštěstí se tehdy databáze rozbít nestihla.

Celý problém je způsoben nízkým limitem pro počet otevřených souborů.

[cc lang=”bash”]ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3771
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3771
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[/cc]

Zajímavý je údaj open files    (-n) 1024. Je to málo.

Do /etc/security/limits.conf jsem doplnil toto:

[cc lang=”bash”]

*                soft     nofile          65000
*                hard    nofile          65000
root           soft     nofile          65000
root           hard    nofile          65000
[/cc]

První sloupec je název uživatele, ve druhém sloupci soft znamená výchozí hodnotu, uživatel ji může měnit až do maxima stanoveného druhým řádkem s hard ve druhém sloupci. Řádky pro roota jsou uvedeny zvlášť schválně, hvězdička se na něj nevztahuje.

Na serveru běží MariaDB, kdybych měl MySQL, nastavení v /etc/security/limits.conf je ignorováno. Limit bych musel nastavit přímo ve scriptu upstartu v /etc/init/mysql.conf.  Do části pre-start script doplnit limit nofile 65000 65000.

Užil jsem si s tímto problémem dost, snad někomu popsané řešení také pomůže.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *