Doména zdarma k jakékoliv
nové objednávce webhostingu!

(.cz, .eu, .com, .net, .org, .info, .biz)


Měsíc na vyzkoušení virtuálního
serveru (VPS) zdarma
.
bez jakýkkoliv dalších podmínek!
Více informací o VPS

Nevybrali jste si z nabízených programů?
Máte speciální požadavky?
Kontaktujte nás
rádi Vám sestavíme nabídku na míru!

Zajímá Vás, kteří klienti využívají
naše služby?
Klikněte zde!

hlavicka

Zálohování souborového systému pomocí utility rsnapshot

Máte li v hostingu virtuální nebo dedikovaný server s pronajatým místem pro backup na externím diskovém poli, nebo chcete-li si zálohovat vlastní server nastává otázka jaký software pro tento účel použít

Známe přísloví říka že v jednoduchosti je síla.
Doporučujeme proto použít rsnapshot - Perlový skript napsaný nad rsync.

rsnapshot je utilita pro vytváření snapshotu (aktuálního obrazu systému) pro zálohu lokálních nebo vzdálených systemů, který synchronizuje soubory a adresáře mezi různými místy za použití co nejmenšího přenosu dat. Tam, kde je to možné, přenáší pouze rozdíly mezi soubory. Zálohy nepoužívají žádný druh komprese, máte tedy vždy s dispozici kompletní zálohu stavu Vašeho serveru k danému datu

rsnapshot využívá tzv. hardlinks - tedy více záznamů pro souborový systém ukazujícíh na jeden soubor, čímž minimalizuje nároky na diskový prostor pro Vaše zálohy

Záloha filesystému


Jednoduchy priklad konfigurace prislusne sekce v /etc/rsnapshot.conf

# nainstalujte si rsnapshot, v Debian like systémech
aptitude install rsnapshot

#Namountujte místo sdlené pomocí NFS protokolu
mount 217.11.233.XXX:/backup-nfs/vguestXXX/backup /mnt/nfs/backup

#Úprava konfiguračního souboru
nano /etc/rsnapshot.conf

#nastavte snapshot root:
snapshot_root /mnt/backup/

#nastavte interval záloh
interval daily 7

#nastavte co zálohovat, napříkladt
# LOCALHOST
backup /_backup/ mujserver1/
backup /etc/ mujserver1/
backup /home/ mujserver1/
backup /opt/ mujserver1/
backup /root/ mujserver1/
backup /var/log/ mujserver1/
backup /var/www/ mujserver1/

(pozor script je citlivý na to, že mezery nesmi být mezery , ale TAB), správnost systaxe config souboru oveříte příkazem "rsnapshot configtest"

#přidejte spouštení scriptu do cronu
crontab -e
30 02 * * * /usr/bin/rsnapshot -c /etc/rsnapshot.conf daily

Tento záznam znamená že zálohy se psustí každý den v 02:30 hodin
v adresáři /mnt/backup/mujserver1 pak uvidíte pro každý den jeden adresář
daily.0 (nejnovejsi)
daily.1
.
.
daily.6 (nejstarší)

V každém z adresářů uvidíte plnou zalohu souborů k danému dni
Program stahuje pouze soubory, ktere jsou nové nebo se změnily a pro zbytek vytvori hardlinky, soubory tedy zabiraji jen velikost jednoho plného backupu a změnených souborů

v /etc/rsnapshot.conf lze definovat Vase vlastni skripty ktere se maji spustit pred a po zaloze,
mužete tedy před kopírovaním souborů udelat treba dump databáze, namountovat disk se zálohami etc..
jsou to parametry:
cmd_preexec /path/to/preexec/script
cmd_postexec /path/to/postexec/script

 

Záloha MySQL

Pro obsah MySQL databází nestačí jednoduchá záloha souborů pro MySQL, nedošlo by ke koretktní záloze právě používaných souborů. Stejně tak pomocí zálohy filesystému nedojde k záloze například souborových balíčků, obsahu crontabu atd..


Ukážeme si tedy jak koretktně zazálohovat MySQl databázi

Nejříve nastavíme preexec script:

cmd_preexec /root/scripts/predzalohou.sh

jeho obsah:

 

#!/bin/sh

mysql_user="sqlbackup"
#(mužete použít root účet, z důvodu větší bezpečnosti je vhodnější vytvořit pro zálohování uživatele s globálním oprávněním: #SELECT, RELOAD, SHOW DATABASES, LOCK TABLES, SHOW VIEW .
mysql_pass="nejakeheslo"
timestamp="`date +%Y%m%d-%H%M`"

# adresář /_backup/_daily bude adresář kam se bude ukádat zaloha MySQL ,seznam balicku v systemu a obsah crontab tabulky # #Tyto data se pak zkopírují pres rsnapshot samotný, pro jistotu uchováme 2 denní dump databáze
#/_backup/_daily
#/_backup/_daily.1
#Obsahem budou adresáře crontab , dpkg, mysql

# vytvoříme adresář:
mkdir -p /_backup/_daily

#smažeme včerejsi zalohu
rm -rf /_backup/_daily.1
#posledni presuneme do vcerejsi
mv /_backup/_daily /_backup/_daily.1

#vytvorime adresare pro dnešní zálohu
mkdir -p /_backup/_daily/mysql
mkdir -p /_backup/_daily/crontab
mkdir -p /_backup/_daily/dpkg

# vytvoříme dočasný adresář pro dump databáze:
mkdir /tmp/mysql
cd /tmp/mysql

# vylistujeme jmena vsech datatabází
echo "show databases;" | mysql -u${mysql_user} -p${mysql_pass} > databases_list
#odstraníme první řádek se jménem databáze
sed -i '1d' databases_list
#provedeme dump v3ech tabulek v databázi:
for i in `cat databases_list`; do mysqldump -u${mysql_user} -p${mysql_pass} $i > $i.sql; done
#odstraníme již nepotřebný seznam databází
rm databases_list
# zabalíme jednotlivé databáze:
/bin/tar pczf ${timestamp}_mysql_pojedne.tar.gz ./*.sql
#odstraníme nezabalené tabulky
rm /tmp/mysql/*.sql
# přesuneme soubor se zabalenými datbázemi do aresare s dennimi zalohami
mv /tmp/mysql/* /_backup/_daily/mysql

# vytvoříme ještě kompletní dump MySQL datbáze pro její kompletní obnovení pro připad pádu systému a zabalime ji:
mysqldump -u${mysql_user} -p${mysql_pass} --all-databases > ${timestamp}_all_databases.sql
/bin/tar pczf ${timestamp}_mysql_all_databases.tar.gz ./*.sql

# smazeme nezabaleny soubor
rm /tmp/mysql/*.sql
#presuneme ten zabaleny do aresare s denními zalohami
mv /tmp/mysql/* /_backup/_daily/mysql
# uklidime po sobe /tmp
rm -rf /tmp/mysql
#zazalhujeme obsah crontabu
cd /_backup/_daily/crontab
crontab -l > /_backup/_daily/crontab/`date "+%Y%m%d-%H%M"`.crontab.txt
# zazálohujeme seznam nainstalovaných balíčků
dpkg -l > /_backup/_daily/dpkg/`date "+%Y%m%d-%H%M"`.packages.txt