Export a Import databází v mariadb a jak nastavit míru komprese
Napsal: pon 29. srp 2016 21:48:37
Pokud chceme exportovat všechny databáze tak to provedeme příkazem:
Rovnou je možné zapnout komprimaci:
Pokud vynecháme přepínač "--skip-lock-tables", tak se export může zaseknout na nějaké uzamknuté tabulce a snadno nastane chyba při následném importu nedokončeného exportu. Je dobré myslet i na ty uzamknuté tabulky a zajistit jejich odemčení (opravu)
Pokud chceme exportovat jen nějaké konkrétní tabulky konkrétní databáze, tak použijeme příkaz:
Import provedeme příkazem:
Import gzipovaného souboru provedeme příkazem:
A teď ta slíbená míra komprese:
Exportován byl běžný obsah s cca 20ti jednotlivými databázemi. Disk byl 15krpm SAS2 disk. Databáze i export běžel na stejném disku. Je to velmi častý případ u malých serverů. Tedy klasický plotnový, ale velmi rychlý. Z naměřených dat vyplývá, že běžný dump je nejen objemově velký a také trvá déle než ten samý dump se zaplou kompresí. Vysvětlení je prosté. Exportnímu programu se do cesty plete velké množství zápisů a čtení. Pokud procesor komprimuje data, tak jich je pro zápis potřeba výrazně méně a tedy čtení databáze může probíhat rychleji.
Z měření vyplývá, že nejvýhodnější pro dump je stupeň komprese 1. Dump je hotový nejrychleji a tedy server není zbytečně zatížen delší čas. Zároveň se množství zapasaných/přenesených dat zmenšilo víc jak 3x. Vyšší stupně komprese již výrazně navyšují čas běhu dumpu a úspora dat již není tak výrazná.
Kód: Vybrat vše
mysqldump -u uzivatel -p --all-databases --skip-lock-tables> vsechny_databaze.sql
Rovnou je možné zapnout komprimaci:
Kód: Vybrat vše
mysqldump -u uzivatel -p --all-databases --skip-lock-tables | gzip -1 -c> vsechny_databaze.sql.gz
Pokud vynecháme přepínač "--skip-lock-tables", tak se export může zaseknout na nějaké uzamknuté tabulce a snadno nastane chyba při následném importu nedokončeného exportu. Je dobré myslet i na ty uzamknuté tabulky a zajistit jejich odemčení (opravu)
Pokud chceme exportovat jen nějaké konkrétní tabulky konkrétní databáze, tak použijeme příkaz:
Kód: Vybrat vše
mysqldump -u uzivatel -p jmeno_databaze tabulka1 tabulka2 tabulka3 > export_tabulek.sql
Kód: Vybrat vše
mysql -u uzivatel -p -h localhost jmeno_databaze < databaze.sql
Import gzipovaného souboru provedeme příkazem:
Kód: Vybrat vše
zcat databaze.sql.gz | mysql -u uzivatel -p databaze
A teď ta slíbená míra komprese:
Stupeň komprese | čas | velikost souboru | zápis na disk (Mbit/s) |
čistý dump | 160 | 3302 | 12.6 |
1 | 104 | 957 | 72 |
3 | 120 | 906 | 29.2 |
6 | 154 | 825 | 5 |
9 | 311 | 805 | 2.5 |
Z měření vyplývá, že nejvýhodnější pro dump je stupeň komprese 1. Dump je hotový nejrychleji a tedy server není zbytečně zatížen delší čas. Zároveň se množství zapasaných/přenesených dat zmenšilo víc jak 3x. Vyšší stupně komprese již výrazně navyšují čas běhu dumpu a úspora dat již není tak výrazná.