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








