MariaDb - ako zalohovat/obnovovat db?

petersveter

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #15 kdy: 05. 03. 2024, 09:13:39 »
Nejak si neviem predstavit ze by Maria/Mysql mohli byt vypnute a mat poskodene data tym ze nezbehne fsync alebo nieco podobne. To mi pride ako nejaka extremna situacia.

PGSQL znie lepsie ale je to pre mna neschodne riesenie kedze cely zivot pouzivam mysql a prepisat sql a schemu pre pgsql by bolo casovo narocne(uz som pgsql skusal ale prave tie rozdiely ma vzdy odradili z jej pouzivania, tiez absencia dobreho gui). Ale aspon je dobre vediet ze pgsql ma priamo nejaky nastroj. I ked ono by sa dalo polemizovat ze maria ma prave ten BACKUP STAGE ktory funguje totozne takze pgsql nie je v nicom odlisna tym padom a ide skor len o akysia individualny bias? Plus myisam dnes uz naozaj nikto nepouziva.

A tiez je tu percona a xtradb ako dalsia alternativa pre mysql a innodb a tiez ma xtrabackup. Takze mysql/maria/percona ma stale co povedat si myslim.
« Poslední změna: 05. 03. 2024, 09:18:05 od petersveter »


Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #16 kdy: 05. 03. 2024, 10:01:41 »
Nejak si neviem predstavit ze by Maria/Mysql mohli byt vypnute a mat poskodene data tym ze nezbehne fsync alebo nieco podobne. To mi pride ako nejaka extremna situacia.

PGSQL znie lepsie ale je to pre mna neschodne riesenie kedze cely zivot pouzivam mysql a prepisat sql a schemu pre pgsql by bolo casovo narocne(uz som pgsql skusal ale prave tie rozdiely ma vzdy odradili z jej pouzivania, tiez absencia dobreho gui). Ale aspon je dobre vediet ze pgsql ma priamo nejaky nastroj. I ked ono by sa dalo polemizovat ze maria ma prave ten BACKUP STAGE ktory funguje totozne takze pgsql nie je v nicom odlisna tym padom a ide skor len o akysia individualny bias? Plus myisam dnes uz naozaj nikto nepouziva.

A tiez je tu percona a xtradb ako dalsia alternativa pre mysql a innodb a tiez ma xtrabackup. Takze mysql/maria/percona ma stale co povedat si myslim.

docela snadno, stačí třeba v systemd službě mít TimeoutStopSec>0 (či obdobu v dockeru) a vypnutý fast shutdown, pak se nemusí vše řádně stihnout. Mít starší verzi mariadb s O_DSYNC, kde to dělalo občas problémy a fsync se při vypnutí nevolal. Stejně tak mít O_DIRECT a vypnutý innodb_use_native_aio (což kvůli bugům je automaticky na některých kernelech, ikdyž ho v configu zapneš), pak nezapsaná data zůstávají v innodb bufferech. Mariadb ještě docela nedávno neuměla oddělit fsync metadat a dat, takže volala obě najednou, což je drahé a tak se tím šetřilo. Takže pozor na to, je to občas docela alchymie. Teď to celé strč do kombinace s nějakým overlayfs, protože ti přišlo skvělé to spustit v dockeru.

Povinná metadatová databáze "mysql" je v myisam enginu, to k tomu nepoužívání, pokud jí změníš na innodb, což lze, tak občas něco nepěkně selže. Mariadb je neskutečně zákeřná tím, že má řadu archaických částí a kódů. BACKUP STAGE je dobrá funkce, řeší to právě řadu těch problémů, o kterých jsem psal. Nepřitomnost oficiálního nastroje na fyzický backup, strohá oficiální dokumentace je něco, co by ti mělo spustit v hlavě červenou kontrolku, že tady je něco špatně.

Doporučuji dělat backup přes replikaci (galera nebo klidně asynchronní nativní) a metadata, která jsou v mysql databázi si držet bokem či na ně používat mysqldump.

xtrabackup je depracated, stejně jako celé xtradb, to už se dále nevyvíjí. Stejně tak i tokudb a nově se všichni soustředí na   myrocks (ironie: jsem zvědavý co ho za pár let nahradí).

Mysql/Mariadb se dlouhé roky snažili získat jakkoukoliv výhodu, aby byly rychlejší, takže vše je postavené na tenkých základech, používají spoustu hacků, spousty triků za cenu nespolehlivosti a složité obsluze. Postgresql raději jde méně efektivní cestou (z hlediska cpu, ram), ale je zpravovatelnější, jeho chování očekávatatelné a celkově se s ním lépe pracuje. Jako UI je dobré od Jakuba Vrány Adminer. Přechod znamená nějakou práci a učení, ale dlouhodobě se ti asi vyplatí.

Tak dlouho jsem se snažil udržet mysql/mariadb stabilní až mám dnes nejvíce zakázek právě v opravě rozbitých databází.

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #17 kdy: 05. 03. 2024, 10:48:49 »
docela snadno, stačí třeba v systemd službě mít TimeoutStopSec>0 (či obdobu v dockeru) a vypnutý fast shutdown, pak se nemusí vše řádně stihnout. Mít starší verzi mariadb s O_DSYNC, kde to dělalo občas problémy a fsync se při vypnutí nevolal. Stejně tak mít O_DIRECT a vypnutý innodb_use_native_aio (což kvůli bugům je automaticky na některých kernelech, ikdyž ho v configu zapneš), pak nezapsaná data zůstávají v innodb bufferech. Mariadb ještě docela nedávno neuměla oddělit fsync metadat a dat, takže volala obě najednou, což je drahé a tak se tím šetřilo. Takže pozor na to, je to občas docela alchymie. Teď to celé strč do kombinace s nějakým overlayfs, protože ti přišlo skvělé to spustit v dockeru.

Povinná metadatová databáze "mysql" je v myisam enginu, to k tomu nepoužívání, pokud jí změníš na innodb, což lze, tak občas něco nepěkně selže. Mariadb je neskutečně zákeřná tím, že má řadu archaických částí a kódů. BACKUP STAGE je dobrá funkce, řeší to právě řadu těch problémů, o kterých jsem psal. Nepřitomnost oficiálního nastroje na fyzický backup, strohá oficiální dokumentace je něco, co by ti mělo spustit v hlavě červenou kontrolku, že tady je něco špatně.
Pokud nedokážete databázi korektně vypnout, máte problém tak jako tak. Narazíte na něj minimálně při aktualizaci jádra a restartu systému, nebo při nutnosti vypnout server (třeba při výpadku napájení). Takže já bych nejprve vyřešil to, jak korektně vypnout databázi, a pak už můžete použít snapshoty nebo kopii datových souborů.

petersveter

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #18 kdy: 05. 03. 2024, 11:07:54 »

jjrsk

  • *****
  • 592
    • Zobrazit profil
Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #19 kdy: 05. 03. 2024, 14:43:27 »
Jasne, ved ono zase to nie je uloha DB aby "sama seba" vedela zalohovat.
To se prave pletes. Databaze musi umet zalohovat, nikdo jiny to za ni neudela. Normalni databaze ma nejaky vlastni system zalohovani + ma api, ktere muze volat externi zalohovac.

A funguje to tak, ze ty reknes databazi "deme zalohovat", databaze ti rekne "moment" ... dokonci bezici transakce (tady prichazi kamen urazu s tupym vyvojarem aplikace), a teprve pak ti rekne "krles". Nacez ty ji samozrejme ve finale sdelis, ze "hotovo". Databaze zaroven potrebuje vedet ze byla provedena zaloha, treba proto aby ty transakcni logy mohla vymazat.

Samozrejme se pocita s tim, ze se databaze (kazda normalni) zalohuje za behu. A proto napriklad je vrele doporucovano mit transakcni logy na jinem disku nez data, protoze prave do transakcniho logu databaze zapisuje po dobu kdy bezi zalohovani. A ty tudiz nechces treba prostrednicvim snapshotu vyrabet nekonzistentni zalohu transakcniho logu.

Tohle maria/myslq neumi. To sice neznamena, ze se neda pouzit na nejaky srandaweby, ale pro nasazeni u aplikaci kde nechces prijit o data je vazne zcela nepouzitelna.


Logik

  • *****
  • 1 043
    • Zobrazit profil
    • E-mail
Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #20 kdy: 05. 03. 2024, 15:22:39 »
jjrsk:
Ehm, imho to vidíš příliš složitě. Dobrá databáze s rozumnou architekturou (např. generační) a tedy rozumně řešenou transakční izolací nic takového nepotřebuje, protože různé transakce mohou vidět různou "verzi" databáze. A prostě zálohování proběhne v jedné transakci, která vidí stav (commitovaných) dat k jednomu danému okamžiku - a nic více prostě k jednorázové záloze nepotřebuješ. Mám pocit, že tady polovina lidí a postů řeší rovnáky na vohejbáky MySQL, a zobecňuje je na databáze obecně.

Takže MySQL to možná neumí, ale rozumné db (např. PostgreSQL) to nepotřebují. Ne, že by takovou funkcionalitu neměla, ale ta slouží nikoli k jednorázové záloze, ale k záloze, na kterou jdou následně přehrávat WAL logy, což je oproti tomu, co se zde řeší, vyšší dívčí.https://www.postgresql.org/docs/current/continuous-archiving.html
==

Stejnětak u rozumné databáze po vypnutí není problém kopírovat soubory (viz např.:https://www.postgresql.org/docs/current/backup-file.html), protože databáze po vypnutí prostě pošle všechna data kernelu, a jestli to je nebo není flushnuto kernelem na disk při kopírování souborů nijak nevadí. To, že při kopírování souborů musím počkat, až proces databáze reálně skončí (a ne spoléhat na to, že jsem mu řekl: "chcípni") je samozřejmě samozřejmost.
 
« Poslední změna: 05. 03. 2024, 15:24:27 od Logik »

petersveter

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #21 kdy: 05. 03. 2024, 15:55:51 »
Logik, vidim to podobne. Ale zacinam sa priklanat na stranu nasadenia pgsql. Nie vsade, ale na par konkretnych write-heavy aplikacii mi to zacina celkom davat zmysel.

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #22 kdy: 05. 03. 2024, 16:59:08 »
Použití PostgreSQL rozhodně doporučuju, chová se to prostě jako normální databáze. Použít pak btrfs snapshoty a spustit databázi nad starším snapshotem je pak triviální (když to máte správně připravené), jak popisuje třeba Heron v BTRFS v praxi po 5 letech: PostgreSQL. Nebo je to popsané přímo v dokumentaci PostgreSQL: File System Level Backup.

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #23 kdy: 05. 03. 2024, 17:11:06 »
Přesně to samé provozuji s mariadb + ZFS. Proč by to  nemělo fungovat, vždyť je přímo v tom popisu napsané, že db musí být shozená?

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #24 kdy: 05. 03. 2024, 17:48:37 »
Přesně to samé provozuji s mariadb + ZFS. Proč by to  nemělo fungovat, vždyť je přímo v tom popisu napsané, že db musí být shozená?
Pokud bude databáze zastavená, bude to fungovat s jakoukoli databází, která neztrácí data při každém vypnutí. Mezi tím se ale diskutuje o tom, že se to dá dělat i bez shozené databáze – pokud se ta databáze chová jako normální databáze a pokud vám nevadí, že se to bude chovat jako třeba při výpadku napájení. Tj. pořád budete mít databázi ve stavu, že je tam zapsaná poslední potvrzená transakce, ale náběh bude třeba chvilku trvat (protože se musí přehrát potvrzené ale nezpracované transakce).

Logik

  • *****
  • 1 043
    • Zobrazit profil
    • E-mail
Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #25 kdy: 05. 03. 2024, 17:53:26 »
petersveter: Upřímně, pokud máš potřebu řešit takovéto věci na fóru, tak bych se hodně divil, kdybys dělal aplikace takového rozsahu, že by mělo smysl použití MySQL. MySQL podle mých skromných zkušeností může mít smysl tam, kde se jde výkonem tak na hranu, že občas "špinavá" architektura MySQL může přinést rychlost, kterou robustní Postgresql mít z principu nemůže - a už to nejde "dohnat železem". Ale dokud to jde dohnat železem, tak problémy, které s PostgreSQL nemusíš řešit, budou vždy levnější, než to "železo". (Pak se ještě občas se narazilo na nějakou featuru, kterou PostgreSQL neměla, ale mám dojem, že to byla minulost, že už se postgreska víceméně vše co "normální člověk potřebuje" naučila).

Pravda, od MySQL jsem utekl už dávno, a měl bych velkou averzi se vracet, takže ber můj pohled jako "poněkud zaujatý" a možná ne úplně reflektující současný stav MySQL (byť zkušenosti lidí co tu napsali my jen potvrzují mé starší zkušenosti), ale zas si nemyslím, že je tak mimo.

Tzn.: bejt Tebou, tak se naučím postgresku a přemigruju všechno, co jde.



Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #26 kdy: 05. 03. 2024, 18:19:15 »
Logik, vidim to podobne. Ale zacinam sa priklanat na stranu nasadenia pgsql. Nie vsade, ale na par konkretnych write-heavy aplikacii mi to zacina celkom davat zmysel.

Předem si to vyzkoušejte. PostgreSQL má jinou implementaci MVCC a jiný formát tabulek a indexů než MySQL a pokud máte opravdu write heavy aplikace , tak se Vám MySQL bude pravděpodobně chovat lépe. Moje zkušenost je taková, že Postgres je perfektní databáze, která dobře zvládá aplikace eshop, účetnictví, .. ale aplikace ve smyslu agregátorů - mám množinu slov, a pro každý klik na slovo na českém internetu udělá inkrementaci, tak to není to pravé ořechové. Jednak pro tento case jsou speciální databáze, ale i MySQL asi bude lepší než Postgres. Třeba za pár let bude možné použít Oriole storage engine https://www.orioledata.com/.

V roce 2016 migroval Uber z Postgresu na MySQL - a možná hlavním důvodem byly problémy při write heavy provozu https://www.uber.com/en-CZ/blog/postgres-to-mysql-migration/

Vždy to chce vyzkoušet - záleží na počtu indexů, velikosti tabulek, velikosti RAM, rychlosti IO, ... nicméně pokud děláte opravdu hodně UPDATE a zvlášť na menší množině řádků, tak je potřeba hodně VACUUM a na to se mohou nabalovat další problémy. Jinak pro zajímavost - na Postgresu běží s přehledem a velkou rezervou Aukro, relativně bez problémů Fortuna, atd atd.
« Poslední změna: 05. 03. 2024, 18:21:33 od Pavel Stěhule »

petersveter

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #27 kdy: 05. 03. 2024, 18:22:43 »
Logik, nemas ty nejaku "cognitive dissonance"? Lebo pises na jednej stranke aka je mysql dobra a rychla a vykonna a ako pgsql mozno uz ma vsetky ficury a mozno uz nie je taka pomala a potom na druhej strane hovoris ze pgsql all the way. To nedava moc zmysel :)

Ked sa bavime o kontexte vypnutej db na zalohy, co uz sme poriesili, ze tam nie je rozdiel teda. A ked chcem pokracovat v konverzacii pre a proti, tak som este nepocul nejaky solidny argument pre pgsql teda, okrem emocionalnych a subjektivnych pohladov(co je v poriadku, kazdy ma pravo mat rad co ma rad, niekt oma rad apple, iny ms, niekto samsung, iny ios, niekto mysql, iny pgsql...).

Nehovorim ze treba pokracovat v diskusii, kedze hlavna otazka bola zodpovedana. Ale ak ma niekto nieco k pgsql vs mysql tak kludne sem s tym.

jjrsk

  • *****
  • 592
    • Zobrazit profil
Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #28 kdy: 05. 03. 2024, 18:30:36 »
Ehm, imho to vidíš příliš složitě. Dobrá databáze s rozumnou architekturou ...
Jenze se bavime o myslq ...

Jinak ve finale zalezi predevsim na tom, co si muzes dovolit a co ses ochoten pripadne zaplatit.

Muzu se na to podivat klidne nasledovne. Eshop. Co se muze podelat? Vlastne hromada veci se muze podelat zcela mimo moji kontrolu - uprostred nejakyho procesu lehne zakaznikovi net, a nenadelam s tim nic ...

Takze se k tomu muzu postavit klidne i tak, ze si reknu, OK, vetsina databazi prezije i odpojeni natvrdo, holt ztratim nejaky data. Ty muzu ztratit i milionem jinych zpusobu. Takze proste budu delat snapy za jizdy bez dalsiho, coz je vlastne presne totez jako kdyz to natvrdo vypnu, a budu doufat, ze aspon jedna z tech 3,5 10 ... zaloh bude fukcni a proste odepisu data za posledni hodinu, den, tyden ...

A muze to byt naprosto relevaltni a zcela koser pristup, proste pro me ty data nemaji takovou hodnotu, abych to nejak uber resil, predpokladam, ze pokud nekomu objednavka nedorazi, objedna si to pak znova.

Jenze tenhle pristup samozrejme je tim problematictejsi, cim rozsahlejsi je cela infrastruktura, protoze to samozrejme nasledne ovlivni hromadu dalsich systemu.

petersveter

Re:MariaDb - ako zalohovat/obnovovat db?
« Odpověď #29 kdy: 05. 03. 2024, 18:48:51 »
jjrsk: ale v tvojom priklade akosy absentuje existencia transakcii ktore su prave na toto robene.