Zálohovanie súborov a databáz na linux serveroch je veľmi jednoduché, v porovnaní s inými operačnými systémami, k tomu nepotrebujeme nainštalovať žiadny softvér. Pri kúpenom softvéri sa často stáva, že nepracuje úplne presne podľa našich predstáv a nič s tým nevieme spraviť. Linux je iný a ponúka nám viac flexibility. V tomto článku si ukážeme ako si pripraviť presne také zálohovanie aké potrebujeme a nastavíme k nemu automatické spúšťanie.
Vytvoríme si skript na zálohovanie:
Na našom linux serveri si vytvoríme priečinok s názvom backups.
sudo mkdir /var/backups
sudo chown user:user /var/backups
Do tohto priečinku sa budú ukladať naše zálohy a tiež sa v ňom bude nachádzať script zabezpečujúci zálohovanie.
touch /var/backups/backup.sh
vi /var/ backups/backup.sh
V scripte si pripravíme niekoľko premenných, ktoré sa môžu meniť každým dňom
#!/bin/sh
echo "Nazov zalohy"
BACKUPDIR="$(date +%Y-%m-%d)"
USER="MYSQL_USERNAME"
PASSWORD="MYSQL_PASSWORD"
echo $BACKUPDIR
mkdir /var/backups/$BACKUPDIR
chmod 777 /var/backups/$BACKUPDIR
V skratke, zadefinovali sme si prihlasovacie údaje k našej MySQL databáze a vytvorili priečinok, ktorého názov je dnešný dátum.
Pre jednotlivé databázy vytvoríme súbory s rovnakým názvom ako sú pomenované na serveri a skomprimujeme ich pre zredukovanie miesta na disku.
DBS="$(mysql -u $USER -h localhost -p$PASSWORD -Bse 'show databases')"
for db in $DBS
do
echo $db
mysqldump --user=$USER --password=$PASSWORD --databases $db --opt --quote-names --allow-keywords --complete-insert | bzip2 -c > /var/backups/$BACKUPDIR/$db-db.sql.bz2
done
Zvolíme si priečinok na disku, ktorého obsah chceme zálohovať. Zálohovať budeme iba jeho podpriečinky, vytvoríme pre ne ich komprimovanú kópiu a uložíme do priečinku, kde sme uložili aj databázy.
DIRS="ls -la /var/www/*"
for DIR in $DIRS
do
DIRNAME=$(basename $DIR)
if [ -d "$DIR" ]; then
echo $DIRNAME
if [ $(date +%u) -eq 1 -o $(date +%u) -eq 4 ]; then
tar -jcvf /var/backups/$BACKUPDIR/$DIRNAME-wf.tar.bz2 $DIR
fi
tar -jcvf /var/backups/$BACKUPDIR/$DIRNAME-w.tar.bz2 $DIR --exclude='*/dir/*' --exclude='*/dir2/subdir/*'
fi
don
V scripte máme nastavené 2 zálohovanie
Ako som písal vyššie, dáta budeme ukladať na NAS server. Na prenos súborov použijeme samba klienta. Na NAS serveri vytvoríme priečinok backups a nastavíme zdieľanie.
Napríklad:
IP NAS: 192.168.1.1
Názov zdieľaného priečinku: nas-backups
Vytvoríme súbor, ktorý bude obsahovať prihlasovacie údaje k NAS serveru.
touch /var/backups/.smbclient
sudo vi /var/backups/.smbclient
username=meno
password=heslo
domain=WINDMN
Na koniec zálohovacieho scriptu pridáme:
smbclient //192.168.1.1/nas-backups -A /var/backups/.smbclient -c "mkdir $DIR; cd $DIR; lcd /var/backups/$DIR; prompt; recurse; mput *; exit;"
echo END
Automatické spúšťanie zabezpečí cron a nastaviť si ho môžeme akokoľvek nám to vyhovuje.
Napríklad, denne o 11:00
crontab –e
00 11 * * * /var/ backups/backup.sh
Takýmto spôsobom si teda vieme vytvárať zálohovanie súborov. Jednotlivé kroky si môžeme upravovať podľa vlastných potrieb tak aby výsledok vyhovoval.
V prípade, že zálohujete veľké množstvo databáz, môže sa stať, že sa otvorí príliš veľa súborov, môže dôjsť k prekročeniu maximálne povoleného limitu.
Pri prekročení limitu dôjde k chybe: Too many open files a nie je ďalej možné čítať dáta z tabuliek databáz.
Aby sme script mohli používať, treba zvýšiť limit, konkrétne open_files_limit. Premennú nastavujeme v súbore my.cnf, úpravou, alebo riadku.
sudo vi /etc/mysql/my.cnf
open_files_limit = 65536
Niektoré verziue linuxu však túto zmenu ignorujú (zrejme bug), z toho dôvodu je potrebné vykonať viac úprav:
sudo vi /lib/systemd/system/mysql.service
Doplniť na koniec:
LimitNOFILE = infinity
LimitMEMLOCK = infinity
Upravíme ďalší súbor:
sudo vi /etc/security/limits.conf
Doplniť riadky:
* soft nofile 65536
* hard nofile 65536
mysql soft nofile 65536
mysql hard nofile 65536
Upravíme my.cnf:
sudo vi /etc/mysql/my.cnf
Upraviť alebo doplniť riadky
[mysqld]
open_files_limit = 65536
open-files-limit = 65536
[mysqld_safe]
open_files_limit = 65536
open-files-limit = 65536
Taktiež treba upraviť súbor mysql.conf, ktorý sa používa pri spúšťaní služby. Doplňte pred pre-start blok:
sudo vi /etc/init/mysql.conf
limit nofile 32000 32000
limit nproc 32000 32000
Reštartujte MySQL, prípadne server.
sudo service mysql restart