Portál AbcLinuxu, 11. května 2025 02:00
Řešení dotazu:
Tohle je jeden z asi tak tisíce důvodů, proč dát přednost skutečné databázi (PostgreSQL) před dětskou hračkou (MySQL).
K původnímu dotazu: Jediná možná prevence je solidní databáze. A samozřejmě solidní souborový systém, to se rozumí samo sebou. A taky nepoužívat pokud možno žádné úžasně rychlé, zato však data pojídající (v případě výpadku elektřiny) mount optiony jako nobarrier
a podobné.
Celkom rozumne mi pride robit snapshot suborov za chodu, pokial predtym pozastavite DB. Samozrejme to predpoklada snapshotovaci FS, btrfs, pre velke nasadenia zfs. Ak taky FS nie je mozne pouzit, treba robit snapshoty celej virtualky alebo LVM. Pocas zalohovania je DB v read-only stave, snapshot trva iba okamih. Aj ked je pravda, ze vela aplikacii nepobezi s RO databazou, ale 3-5s vypadok mi pride akceptovatelnejsi ako pripadne mnoho hodinove (potazmo viacdnove) obnovovanie z textovych dumpov. ja to robim nejako takto (pre-freeze-script):
<code>
sync mysql --defaults-extra-file=/etc/mysql/debian.cnf 2>&1 >>/tmp/backup/output <<EOF
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
EOF
echo 1 >/tmp/backup/db_lock sync
btrfs subvolume snapshot -r "/var/lib/mysql" "/var/lib/mysql/snapshots/`date "+%Y_%m_%d__%H_%M_%S"`"
if [ -e /tmp/backup/db_lock ]; then
mysql --defaults-extra-file=/etc/mysql/debian.cnf 2>&1 >>/tmp/backup/output <<EOF
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
EOF
rm -f /tmp/backup/db_lock fi
</code>
ps. niektore aplikacie s MYISAM nebudu fungovat.
pps. overit zalohovanu DB je pomerne jednoduche, staci spustit dalsiu instanciu mysql s upravenym konfigurakom (port, ulozisko) ci uz v RO rezime alebo nad dalsim RW snapshotom. Dokonca je mozne potom z takeho snapshotu vydumpovat textove zalohy.
som zjavne nepochopil ...
Postgres, stejně tak InnoDB data neničí za předpokladu, že platí určité předpoklady - např. že si uživatel nevypne fsync, že fsync reálně funguje (a operační systém nekecá), že nedojde k poškození filesystému, atd. Při dnešní složitosti a miliónu různých optimalizacích je skoro zázrak, že to funguje. Nicméně to překvapivě funguje. Když člověk ví, co se může všechno rozbít, tak problémů s čitelností, konzistencí db několik málo za posledních 5 let.A to byla totálka nebo se to podařilo nějak opravit? Mít totálku několikrát za pět let je dost špatný výsledek pro databázi. U nás může být i odstávka na půl hodiny hrozný problém. I v noci. Na proti tomu, když se ztratí jeden záznam (poslední inzert či update) nás vůbec netrápí. Jsou to většinou nějaké haléře max. koruny škody. Myisam má problém, že se zamyká celá tabulka, a tak celou aplikaci může ucpat jeden delší select. Kromě toho rozdíl v rychlosti není až tak podstatný. To zamykání je klíčové. Řešíme to nyní tak, že čteme z klonu a déle trvající dotazy nestrpíme, musí se prostě optimalizovat, aby nebyly. Není to úplně dobré, ale žít se s tím dá. Ohledně inodb fašírky. Žádné změny defaultního nastavení file systému nebo databáze jsme pokud vím nikdy nedělali. Přesto několikrát inodb totálka i bez výpadku elektřiny. Máme strach to nyní nasadit a pokračujeme na myisam. Kdesi jsem četl, že indodb je lepší a spolehlivější, ale když se pokazí, stojí to zato. Myisam je snadnější pokazit, ale není to problém.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.