Automatické zálohovanie súborov a databáz na linux serveroch

Tvorba vlastného zálohovania na operačnom systéme Linux. Automatické zálohovanie databázy, súborov a ukladanie na sieťové úložisko.
Zaujali sme Vás?
Zobraziť kontaktné údaje

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.

Čo budeme zálohovať a kam zálohy uložíme

Vytvoríme si skript na zálohovanie:

  • zálohy sa budú ukladať do priečinku, ktorého názov bude aktuálny dátum
  • všetkých MySQL databáz, každá databáza bude uložená do zvlášť súboru
  • obsah priečinka, každý priečinok bude uložený do zvlášť súboru
  • zálohované súbory skomprimujeme
  • vytvorenú zálohu si uložíme do sieťového úložiska, v našom prípade to bude NAS server

Vytvorenie scriptu

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

Premenné a automatická tvorba priečinkov záloh

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.

Záloha MySQL databáz

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

Záloha obsahu priečinka

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

  1. Zálohujú sa všetky súbory, ale iba v 1. a 4. deň v týždni, pričom prvý deň je pondelok
  2. Čiastočné zálohovanie, spúšťa sa každý deň, ale vynali sme si niektoré podpriečinky, ktoré nechceme pravidelne zálohovať.

Skopírovanie záloh na sieťové úložisko

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 zálohovania

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
Diskusia ku článku
  Pridať komentár