Ověření domény

.

Helpdesk

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. Použijeme tedy utilitu 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

Nainstalujeme si rsnapshot, v Debian like systémech "aptitude install rsnapshot"

Vytvoříme adresář pro zálohování "mkdir /mnt/backup"

Namountujeme sdílené místo pomocí NFS protokolu, celý níže uvedený řádek můžete uložit do /etc/rc.local aby se adresář namountoval vždy po spuštení serveru. Lze samozřejmě mountovat i v /etc/fstab

mount backup.tvujweb.cz:/backup-nfs/jmenozakaznika/backup /mnt/backup

 

Úprava konfiguračního souboru


nano /etc/rsnapshot.conf

----------------
#nastavte snapshot root:
snapshot_root /mnt/backup/

#nastavte interval záloh
interval daily 7

#Možnost1: nastavte co zálohovat, například
# LOCALHOST
backup<TAB>/var/www/<TAB><ENTER>
backup<TAB>/etc/<TAB><ENTER>

#Možnost2: nastavte zálohování celého rootu
backup<TAB>/<TAB><ENTER>

#poté vynechte nepotřebné adresáře:
exclude /dev
exclude /proc
exclude /sys
exclude /tmp
----------------

Pozor: script je citlivý na to, že mezery nesmi být mezery , ale TAB, správnost syntaxe config souboru oveříte příkazem "rsnapshot configtest"
<TAB><ENTER> v nasem prikladu znamena ze neprve odskočím pomocí tlačítka TAB a pote zmáčkneme Enter.
Tento formát používáme abychom zálohovali přímo do rootu namoutovaného diskspace, tedy např. /mnt/backup/daily.0/etc. Pokud bychom uvedli jméno adresář jak je uvedeno v příkladech v konfig scriptu po instalaci, jako třeba backup<TAB>/etc/<TAB>/backup/ program by vytvářel strukturu adresáře /mnt/backup/daily0/backup/

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ů.

 

Záloha MySQL

Pro obsah MySQL databází nestačí jednoduchá záloha souborů pro MySQL, nedošlo by ke korektní 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:

v /etc/rsnapshot.conf lze definovat Vase vlastni skripty které se mají spustit před zálohou souborů a po ní, mužete tedy po kopírovaní souborů (po kopírování proto, aby již byl vytvořen dnešní adresář daily.0) udelat třeba dump databáze, namountovat disk se zálohami etc..
jsou to parametry:
cmd_preexec /path/to/preexec/script
cmd_postexec /path/to/postexec/script

Nejříve tedy nastavíme v konfiguraci rsnapshot postexec script:

nano /etc/rsnapshot.conf
# přidáme řádek
cmd_postexec /root/scripts/po-zaloze-dat.sh

Z důvodu větší bezpečnosti je vhodnější vytvořit pro zálohování uživatele MySQL databáze s globálním oprávněním: SELECT, RELOAD, SHOW DATABASES, LOCK TABLES, SHOW VIEW. Pokud by se k heslu dostal útočník bude moci databázi přečíst, nikoliv však smazat nebo upravit

Vytvoříme soubor /root/scripts/po-zaloze-dat.sh nano /root/scripts/po-zaloze-dat.sh který bude obsahovat:

#!/bin/sh

mysql_user="backup"
mysql_pass="HesloUzivateleBackup"
timestamp="`date +%Y%m%d`"
ipaddress="1.2.3.4"


# následujicí řádky nám vytvoří jednotlivé soubory pro všechny databáze a zabalí je pomocí gzip,
# můžeme je tedy v případe potřeby přímo importovat v phpMyAdmin
mkdir /mnt/backup/daily.0/_mysql_dump-${timestamp}
cd /mnt/backup/daily.0/_mysql_dump-${timestamp}
echo "show databases;" | mysql -h${ipaddress} -u${mysql_user} -p${mysql_pass} > databases_list
sed -i '1d' databases_list
for i in `cat databases_list`; do mysqldump -f --single-transaction -h${ipaddress} -u${mysql_user} -p${mysql_pass} $i | gzip > $i.sql.gz ; done
rm databases_list

#následujicí řádky nám vytvoří kompletní zálohu celé MySQL databáze do jednoho souboru,
#ten můžeme použít například pro obnovení dat v případě pádu serveru
mysqldump -h${ipaddress} -f -u${mysql_user} -p${mysql_pass} --all-databases > _all_databases.sql
/bin/tar pczf _all_databases-${timestamp}.tar.gz _all_databases.sql
rm _all_databases.sql

Pro zálohu vytváříme adresář /mnt/backup/daily.0/_mysql_dump-${timestamp}, tento adresář nám další den odrotuje a dnešni záloha MySQL tedy zítra bude v adresáři -mnt/backup/daily.1/_mysql_dump-${timestamp}

Nezapomeňte že script musí být spustitelný uživatelem root
chmod 700 /root/scripts/po-zaloze-dat.sh