Tech Life

Ilustrační obrázek

Zálohování MySQL pomocí XtraBackup

16. 03. 2011 12:00    kategorie: Tech Life    autor: PMe    komentářů: 1

V současné době používáme pro zálohování MySQL Serveru mysqldump, který sebou přináší řadu nepřijemností jako je nutnost zamykání tabulek bez ohledu na engine (ztrácí se výhoda MVCC v innoDB), značná délka samotného procesu zálohování a chybějící snadné Point in Time (PIT) recovery pokud není celou dobu MySQL server zamknutý pro zápis. Celkově nelze mysqldump považovat za nástroj pro produkční nasazení.
 

Řešením, jak lépe zálohovat MySQL je typicky nasazení LVM nebo jiné technologie, která provádí snapshot na úrovni souborového systému v okamžiku, kdy je na MySQL serveru puštěn FLUSH TABLES WITH READ LOCK (zjednodušeně provede zamknutí všech taulek pro zápis), čímž je zajištěna konzistence MyISAM tabulek a zamezeno zápisu do innodb, přičemž doba zamčení tabulek je velmi krátká. I když je tohle řešení velmi dobré, přesto má své mouchy.

Asi nejzásadnější vyplývá z implementace LVM, která vyúsťuje ve výrazný pokles výkonu I/O subsystému během udržování snapshotu (v testech se uvádí 80%-90% propad výkonu při sekvenčním zápisu). Další problém vyplývá z úrovně, kde je LVM aplikováno, tj. není to aplikační řešení. Zamčení serveru pro zápis nezajišťuje konzistenci innodb, a tak je nutné po provedení snapshotu ověřit konzistenci dat (ideálně spuštěním v druhé databázi) a během něho provést innodb recovery proces.

Dalším řešením je použití komečního nástroje InnoDB hot backup, který je součásti MySQL Entereprise Edition nebo využít free řešení XtraBackup od Percony.

XtraBackup aneb téměř nelockující zálohování

Abych výše uvedené tvrzení uvedl na pravou míru - xtrabackup zajištuje nelockující zálohování tabulek InnoDB. Nadstavbou je pak innobackupex, který zajišťuje zálohování i MyISAM tabulek. Nicméně pro jejich konzistenci již potřebuje použít zámek pro zápis (FLUSH TABLES WITH READ LOCK), který se aplikuje na úrovni serveru nikoli enginu, a tedy během této fáze dojde k zamčení všech tabulek bez ohledu na engine.

Zálohování se tak skládá ze 3 částí:

  1. backup process - odkopírování datových souborů (*.ibd), zaznamenání LSN (Log Sequence Number), nastartování threadu zaznamenávající změny v transakčním logu (ib_logfileN), které se provedou během odkopírovávání datových souborů; v této fázi jsou zkopírovaná data nekonzistentní
  2. pokud je nutné zálohovat i MyISAM tabulky dojde k jejich zavření a zamčení pro zápis; poté dojde k odkopírování datových i indexových souborů (řádově desítky sekund v závislosti na velikost DB); tento krok je také důležitý pro budoucí obnovu pomocí binárních logů (PIT) pro innodb i myisam tabulky
  3. prepare process - XtraBackup provede obnovení konzistence datových souborů innodb tabulek přehráním zaznamenaných transakčních logů


Zálohovnání MySQL serveru pomocí nástroje innobackupex lze provést následovně:

# fáze 1 a 2
# innobackupex-1.5.1 --user=root --password=XXX --defaults-file=/etc/my.cnf --no-timestamp --ibbackup=xtrabackup_51 /mnt/store/BCK/mysql/0/
# fáze 3
# innobackupex-1.5.1 --defaults-file=/etc/my.cnf --ibbackup=xtrabackup_51 --apply-log /mnt/store/BCK/mysql/0/

Recovery

Obnova je již jednoduchá, stačí ručně přesunout odzálohovaná data do datadiru MySQL serveru nebo použít funkci –copy-back nástroje innobackupex např. následovně:

# innobackupex-1.5.1 --defaults-file=/etc/my.cnf --ibbackup=xtrabackup_51 --copy-back /mnt/store/BCK/0/

Sdílet odkaz:
tisk

Diskuze k článku

Padák, 18.3.2011 23:26

Dobrej tip na hotbackup! Nicméně bych se rád postavil za starej dobrej mysqldump. Pokud se budeme bavit o InnoDB (snad kromě mysql fulltextu není žádný důvod používat MyISAM?), stačí dělat backup v single transakci a držet si bokem binlogy. Je to víc spolehlivé, než hotbackup, který se například nevypořádá se situací, kdy se server jebne před dokončením ALTER TABLE (kdy jsou již změněný tabulky, ale starý schéma se ještě nedroplo). Podle letmýho checku na Google se to stalo poměrně hodně lidem.
P.

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ