Jak zálohovat MySQL databázi?

Wabi

Re:Jak zálohovat MySQL databázi?
« Odpověď #15 kdy: 19. 09. 2013, 11:33:43 »
Lze i za běhu s využitím tohoto:

http://www.percona.com/software/percona-xtrabackup

My to kombinujeme s rsyncem (i když to umí streamovat data na vzdálený server). Pár bash skriptů a crontab.


Re:Jak zálohovat MySQL databázi?
« Odpověď #16 kdy: 07. 10. 2013, 23:45:30 »
Aktualne narychlo som to poriesil cez quick backup v phpmyadmin..... nevyhody- treba to robit manualne, a je to moznu obnovit len pomocou phpmyadmin.
Percon xtrabackup vyzera zaujimave, ked sa to porovna s riesenim dastina co je lepsie pre mysql 5.5, a debian 7?

Re:Jak zálohovat MySQL databázi?
« Odpověď #17 kdy: 08. 10. 2013, 01:12:23 »
Omlouvám se za možná blbej dotaz, ale fakt je zálohování MySQL takovej problém? Věta "Mysql zalohovat za chodu nelze, nedostanes konzistentni zalohu." mě dost překvapila. To jako fakt? Já mám zkušenosti jen s MS SQL a tam stačí prostě příkaz BACKUP DATABASE... pro full backup nebo BACKUP LOG pro inkrementální zálohu logů. Případně to samý naklikat v GUI. V čem je u MySQL problém?

Re:Jak zálohovat MySQL databázi?
« Odpověď #18 kdy: 08. 10. 2013, 07:33:53 »
Omlouvám se za možná blbej dotaz, ale fakt je zálohování MySQL takovej problém? Věta "Mysql zalohovat za chodu nelze, nedostanes konzistentni zalohu." mě dost překvapila. To jako fakt?
V MySQL jsou příkazy nebo programy na backup, které fungují.

MySQL databáze (vlastně dokonce tabulka) jede buď na engine MyISAm nebo InnoDB. MyISAm není transakční, takže když se dělá backup, tak je potřeba zamknout celou databázi, provést backup, odemknout celou databázi (věřím, že příkaz backup to takhle udělá), a pak je backup databáze konzistentní. Ale ten backup trvá strašně dlouho, a databáze je uzamčená pro zápis, a to je často nepřijatelné. Proto je lepší zamknout, zkopírovat soubory, odemknout - rychlejší, ale pořád na nějaký čas zamčené, takže je ještě lepší rozjet replikaci a zálohovat slave - tam nevadí, že se na čas zamkne.

InnoDB je transakční, takže by problém s uzamčením neměl nastat, nemám to vyzkoušené, takže nevím, jak je to pak s výkonem.

Myslím (ale nemám to změřené), že backup a restore celých db. souborů je řádově rychlejší než backup příkazem backup.

Všechny tyhle metody jsou popsané v dokumentaci nebo na webu, ale pro začátečníka je asi složité důkladně si to důkladně pročíst vybrat si.

Zajímalo by mě: Jaký má u MS SQL serveru ten backup vliv na výkon? Čili, když mi běží backup, dá se server rozumně používat?

Re:Jak zálohovat MySQL databázi?
« Odpověď #19 kdy: 08. 10. 2013, 08:05:10 »
MyISAm není transakční, takže když se dělá backup, tak je potřeba zamknout celou databázi, provést backup, odemknout celou databázi (věřím, že příkaz backup to takhle udělá), a pak je backup databáze konzistentní.
Právě protože není transakční, tak backup nemusí být konzistentní, ne?
Když budu jednu hodnotu snižovat a druhou o stejnou velikost snižovat, tak nemám záruku, že na backupu bude součet pořád stejný, ne?

Na druhou stranu, když už někdo používá MyISAM, tak mu asi o konzistenci nejde.


Re:Jak zálohovat MySQL databázi?
« Odpověď #20 kdy: 08. 10. 2013, 08:34:43 »
MyISAm není transakční, takže když se dělá backup, tak je potřeba zamknout celou databázi, provést backup, odemknout celou databázi (věřím, že příkaz backup to takhle udělá), a pak je backup databáze konzistentní.
Právě protože není transakční, tak backup nemusí být konzistentní, ne?
Když budu jednu hodnotu snižovat a druhou o stejnou velikost snižovat, tak nemám záruku, že na backupu bude součet pořád stejný, ne?
Aha, takhle jsem se na to nedíval. Díky.

Re:Jak zálohovat MySQL databázi?
« Odpověď #21 kdy: 08. 10. 2013, 08:41:48 »
MyISAm není transakční, takže když se dělá backup, tak je potřeba zamknout celou databázi, provést backup, odemknout celou databázi (věřím, že příkaz backup to takhle udělá), a pak je backup databáze konzistentní.
Právě protože není transakční, tak backup nemusí být konzistentní, ne?
Když budu jednu hodnotu snižovat a druhou o stejnou velikost snižovat, tak nemám záruku, že na backupu bude součet pořád stejný, ne?
Na druhou stranu, když dělám tohle, tak bych si ty tabulky měl zamknout, jinak ta nekonzistence může vzniknout i z jiných důvodů, než je backup.

Re:Jak zálohovat MySQL databázi?
« Odpověď #22 kdy: 08. 10. 2013, 08:49:48 »
Na druhou stranu, když dělám tohle, tak bych si ty tabulky měl zamknout, jinak ta nekonzistence může vzniknout i z jiných důvodů, než je backup.
Měl no, ale známe praxi žejo :)

Prostě asi se shodneme na tom, že od netransakční databáze těžko očekávat konzistenci - ať už při provozu, pádu, nekorektním vypnutí nebo zálohování.

Re:Jak zálohovat MySQL databázi?
« Odpověď #23 kdy: 08. 10. 2013, 08:56:59 »
Viete mi poradit v skratke ako to riesit pre mysql 5.5, aby to robil cron, povedzme cez rsync. Je potrebne databazu zamknut, nie?
Je lepsie pouzit xtrabackup?

Ivan

Offtopic: Re:Jak zálohovat MySQL databázi?
« Odpověď #24 kdy: 08. 10. 2013, 09:11:09 »
Sorry za flame, ale nemuzi si pomoct.
<flame>
MySQL databaze je tu uz 18 let a porad jeste nema online backup. 18 let to je hrozne dlouha dobe na SW produkt.
</flame>

PS: navic klon SQL, ktery pouziva MySQL je vubec nejvzdalenejsi vsem ANSI/ISO SQL standartum.

j

Re:Jak zálohovat MySQL databázi?
« Odpověď #25 kdy: 08. 10. 2013, 15:33:01 »
Omlouvám se za možná blbej dotaz, ale fakt je zálohování MySQL takovej problém? Věta "Mysql zalohovat za chodu nelze, nedostanes konzistentni zalohu." mě dost překvapila. To jako fakt? Já mám zkušenosti jen s MS SQL a tam stačí prostě příkaz BACKUP DATABASE... pro full backup nebo BACKUP LOG pro inkrementální zálohu logů. Případně to samý naklikat v GUI. V čem je u MySQL problém?

MySQL nema free nastroje na backup (pokud vim, je to soucasti placeny verze), to je jedna vec. Druha vec je, ze jak bylo zmineno, pouzivanejsi DB engine neni transakcni => konzistenci dat si musis zajistit jinak (na urovni aplikace). Ziskas tim samo vykon, ale na ukor bezpeci. A ani pouziti transakcniho engine != konzistentni databaze. Zalezi samozrejme na aplikaci, zda transakce pouziva a zda spravne. Ani M$ SQL ti nezajisti konzistentni data z pohledu aplikace, zajistit ti jen konzistetni databazi.

2Ivan: viz vejs, pokud vim, zalohovaci nastroje byly dycinky soucasti placeny verze.

BTW: Jinak co se tyce M$ SQL, zatizeni ... pri zalohovani, tak samozrejme zalezi predevsim na tom, kam se zalohuje a jak je nadimenzovanej srv/uloziste. Pokud ma srv dost RAMeti, a uloziste je slusne rychly pole, tak to na aplikacich nijak nepoznat. Ovsem standardni nastroje na zalohovani M$ SQL se defakto v realu vubec nepouzivaji. M$ SQL ma API, ktery se da zavolat zvenku, a bezne se zalohuje tak, ze nejakej klient nejakyho zalohovacicho systemu rekne serveru "krles" a ten pozastavi zapis do dat/dokonci tansakce. Pak zpatky rekne "OK" a zalohovac zacne odsypavat data. Pricemz SQLko vesele dal zapisuje do logu. Az zalohovac posle ze "hotovo", tak zacne SQLko aplikovat log do dat.

Re:Jak zálohovat MySQL databázi?
« Odpověď #26 kdy: 08. 10. 2013, 16:11:41 »
to Petr Blahos - dík za odpověď.

K MS SQL ... zajistit konzistenci dat z pohledu aplikace lze, pokud například převod z účtu na účet uzavřu do transakce:
BEGIN TRANSACTION; odeberu peníze z jednoho účtu; přidám peníze na druhej účet; COMMIT TRANSACTION.
Provede se buď oboje, nebo nic, i kdyby mezi tím zhavaroval server. Proto je to transakční databáze, aby to šlo zajistit.

Co se týče zálohování, tak opravdu záleží hlavně na výkonu disků. Pokud jsou slušně dimenzovaný s ohledem na velikost databáze, tak lze i při spuštěným backupu nebo restoru pracovat. Samozřejmě to ale zpomaluje. I u MS SQL je rychlejší vykopírovat přímo databázový soubory. Ani kvůli tomu se nemusí databáze vypínat, stačí udělat VSS snapshot file systému a soubor databáze a logu z něj (Předchozí verze souborů) vykopírovat. Konzistence dat je systémem zaručená. Ale tohle nevyužívá nijak často.

V praxi (větší síť) se opravdu zálogování SQLka volá z externího zálohovacího programu. Ten provede zálohu databází a výsledný soubory rovnou odleje na zálohovací server. Ve výsledku je to ale IMHO úplně stejný, jako zavolat backup přímo v SQL. Tak se to dělá u menších instalací. Buď se to nakliká v GUI jako maitenance plán, nebo se to pustí třeba jako baťák.

Ještě detail - ne každý ví, že Express verze SQLka je zdarma. Jediný reálný omezení je na velikost databáze (max 10 GB), databází může být samozřejmě víc. Max velikost využitelný paměti 1 GB taky nebejvá pro běžný projekty problém.

Ale to jsem trochu odbočil, nechci diskuzi od MySQL odvádět pryč, proto prosím žádný flame war.

Janko Mrkvička

Re:Jak zálohovat MySQL databázi?
« Odpověď #27 kdy: 08. 10. 2013, 16:24:19 »
Ještě detail - ne každý ví, že Express verze SQLka je zdarma. Jediný reálný omezení je na velikost databáze (max 10 GB), databází může být samozřejmě víc. Max velikost využitelný paměti 1 GB taky nebejvá pro běžný projekty problém.

Ale to jsem trochu odbočil, nechci diskuzi od MySQL odvádět pryč, proto prosím žádný flame war.
To je síce pekné, že M$ SQL Express je zdarma, na jeho prevádzkovanie ale potrebuješ nejaký stroj s M$ windows. Napríklad v mojej domácnosti máme spolu 4 počítače, ale takú nepraktickú zvrhlosť nemám ani na jednom z nich (ani ako virtuál).

Kolemjdoucí

Re:Jak zálohovat MySQL databázi?
« Odpověď #28 kdy: 08. 10. 2013, 16:29:19 »
1 % domácností si nainstaluje PostgreSQL. Výkon je menší než u MS SQL, ale konzistentní backup tam je defaultně.

j

Re:Jak zálohovat MySQL databázi?
« Odpověď #29 kdy: 08. 10. 2013, 19:37:20 »
...
Ad M$ express - je tam krom velikosti (a poctu databazi ...) jeste jeden, vcelku zasadni problem - je vyrazne (ale opravdu vyrazne) pomalejsi. +, jak bylo zmineno, je treba ty widle, a k nim prislusny CALy pro uzivatele ... ;D takze to zas tak "zadarmo" neni.

Jinak k zalohovani mozna jeste to, ze u zakaznika mame nasazeno zalohovani na urovni sektoru = zalohujou se zmeny (trvale) a SQLko se vola jen v okamziku, kdy je treba vyrobit konzistentni snap. Tudiz se pri tom prenasi jen relativne malo dat (v nasem pripade maximalne desitky MB). Navic si ten snap muzu obratem primontovat jako dalsi disk a klidne si z toho pripojit tu databazi a pouzivat ji (je to RW samo, ale snap jako takovej se nezmeni, pokud to pri odpojovani vylozene nechci).