Mondhatjuk, hogy idejét múlt a következő post, de a jövőben talán hasznát veszik páran. Arról lesz szó most, hogy miképpen tudjuk könnyen automatizálni az oldalunk biztonsági mentéseit. A két nagy torrent razzia alatt megtanulhattuk, hogy nem árthat egy normális biztonsági mentés.

Több olyan volt az idei razziánál is, akik nem, vagy csak nagyon régi biztonsági mentéssel rendelkeztek. De ez nem új probléma, hiszen már a három évvel ezelőtti razziánál is hasonló volt a helyzet. Pedig alapvetően nem is olyan nehéz dolog ez. A felhasználók pedig láthatóan nagyon csalódottak, ha kedvenc oldaluk egy éves mentéssel tér vissza. Ennél is rosszabb, vagy veszélyesebb, ha az oldal egyáltalán nem rendelkezik biztonsági mentéssel. A mai “szoros” versenyben könnyen felszippantják az oldalak a szabadon eresztett felhasználókat.

Nézzük át, miből kellene állnia egy biztonsági mentésnek egy torrentoldalnál.

  • frontend + tracker
  • torrentek
  • adatbázis

A frontend és tracker lényegében a torrentoldal váza. A  frontend, amit látunk, maga a weboldal, amit nap mint nap látogatunk, a tracker pedig a fájlcseréért felel, kezeli a peereket. A tracker kódja ritkán változik, míg a frontend-en azért lehetnek napi szintű változtatások.
A torrentek természetesen szintén létfontosságúak, nélkülük az egész nem ér sokat. Egy pár hetes kiesés után még jó eséllyel a felhasználóknál vannak a torrentek, így ha visszatér az oldal, és sikerült visszaállítani a torrenteket, hamar visszaszerezhetjük a korábbi peer számokat.
Az adatbázis egyértelmű, ebben tároljuk a felhasználókhoz és a torrentekhez tartozó adatokat. Kritikus dolog, hogy minél kevesebb személyes adatot tároljunk. Ezt úgy lehet legkönnyebben elérni, hogy a lehető legkevesebb adatot követeljük meg a felhasználóktól. Nem kell születésnap, város, vagy internet sebesség. Amit lehet, azt pedig titkosítva tároljuk.

Mindezek mentése kézzel valóban nem egyszerű, és bizony hosszadalmas feladat. Ehhez nyújtunk most egy egyszerűbb megoldást. Nem találtuk fel mi sem a spanyolviaszt, egy internetes megoldást mutatunk, és magyarázunk el. Nem az egyetlen, és könnyen lehet, nem a legjobb, de sokak számára talán egy megfelelő kiindulási alap.

A script Unix alapú rendszerekhez készült, alapvetően Linuxon fog működni, de a legtöbb oldalt talán valamilyen linux szolgálja ki. A shell script futtatásához természetesen szükségünk van hozzáférésre is a szerveren. Lássuk a scriptet:

#!/bin/sh
# System + MySQL backup script
# Teljes mentés vasárnap, a többi napon inkrementális backup készül csak
# Copyright (c) 2005-2006 nixCraft <http://www.cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# Automatically generated by http://bash.cyberciti.biz/backup/wizard-ftp-script.php
# ———————————————————————
### Rendszer beállítások ###
DIRS=”/var/www /etc /var/torrents”
BACKUP=/tmp/backup.$$
NOW=$(date +”%d-%m-%Y”)
INCFILE=”/root/tar-inc-backup.dat”
DAY=$(date +”%a”)
FULLBACKUP=”Sun”
### MySQL Adatok ###
MUSER=”admin”
MPASS=”mysqladminpassword”
MHOST=”localhost”
MYSQL=”$(which mysql)”
MYSQLDUMP=”$(which mysqldump)”
GZIP=”$(which gzip)”
### FTP server Setup ###
FTPD=”/backup/incremental”
FTPU=”username”
FTPP=”ftppassword”
FTPS=”208.111.11.2″
FTPPO=”2121″
NCFTP=”$(which ncftpput)”
### Other stuff ###
EMAILID=”[email protected]
### Backup indítása a filerendszeren ###
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :
### Ellenőrzés, hogy a teljes backup napja van-e ###
if [ “$DAY” == “$FULLBACKUP” ]; then
FTPD=”/home/vivek/full”
FILE=”fs-full-$NOW.tar.gz”
tar -zcvf $BACKUP/$FILE $DIRS
else
i=$(date +”%Hh%Mm%Ss”)
FILE=”fs-i-$NOW-$i.tar.gz”
tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS
fi
###  MySQL mentés indítása ###
# minden adatbázis mentése
DBS=”$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)”
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW-$(date +”%T”).gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
### A mentések áttöltése egy távoli FTP-re ###
#Az ftp-hez ncftp  -t használunk
ncftp -u”$FTPU” -p”$FTPP” -P”$FTPPO” $FTPS<<EOF
mkdir $FTPD
mkdir $FTPD/$NOW
cd $FTPD/$NOW
lcd $BACKUP
mput *
quit
EOF
### Ellenőrizzük, hogy sikeres volt-e a továbbítás ###
if [ “$?” == “0” ]; then
rm -f $BACKUP/*
else
T=/tmp/backup.fail
echo “Date: $(date)”>$T
echo “Hostname: $(hostname)” >>$T
echo “Backup failed” >>$T
mail  -s “BACKUP FAILED” “$EMAILID” <$T
rm -f $T
fi

Lássuk akkor a script működését részletesen. Első körben nézzük meg, hogy mire van szükségünk. Azt már említettem, hogy ssh hozzáférés kell. A gépen emellett pár alapvető, nagyrészt alap linuxos parancsot is fogunk használni. Az adatbázis kimentéséhez mysql és mysqldump lesz a szolgálatunkra. A fájlokat gzip-pel csomagaljuk be, hogy könnyebb és gyorsabb legyen továbbítani ftp-vel. Ezt egyébként ncftp segítségével valósítjuk meg. Természetesen használhatunk másik parancsokat is a tömörítéshez és a csomagolt fájlok feltöltéséhez. Persze ha a rendszerünk nem mysqlt, hanem mondjuk postgresql-t használ, az is megoldható egy kis módosítással.

A script úgy működik, hogy a hét 6 napján csak az új fájlokat másolja fel (inkrementális backup), egy kiválasztott napon viszont teljes backupot készít a megadott könyvtárakról. Ahogy látható, nem árt, hogy ha a torrentek külön mappában vannak, így a frontend és a torrent backupja elkülöníthető. Ha nem megoldható, természetesen mehet egybe is.

A sikeresen összetömörített állományokat ezután ftp segítéségével áttöltjük egy másik helyre. Alapszabály, hogy soha ne arra a gépre csináljuk a mentést, amiről backupolunk, hiszen egy hdd hiba – vagy lefoglalás – esetén meg leszünk lőve. Hiszen hiába backup, ha nem érjük el. Ha hiba történne, még emailt is kapunk a dologról. Persze könnyen felturbózható a dolog, és megírhatjuk úgy is, hogy mindenképpen kapjunk emailt a script lefutásáról.

A kódban lévő kommenteket mi magyarítottuk, a mellékelt linken megtaláljátok az eredetit is és még sok más hasznos backup scriptet. Ezekből könnyedén összeállítható egy backup metódus mindenki szája íze szerint. (Az itt látható kódba csak annyi extra dolgot írtunk bele, hogy az ftp kapcsolódáshoz megadható a port is. Ha nem adjuk meg, akkor az alapértelmezett (21) porton fog próbálkozni.) Az oldal egyébként nagyon hasznos azoknak, akik szeretnének elmélyülni a linux shell script rejtelmeiben. Rengeteg példa van, és remek oktató oldalt hoztak össze.

Aki ennél lustább és megfelel neki a fent mellékelt megoldás, az használja az itt található generátort, aminek segítségével könnyen össze tudja állítani a számára megfelelő scriptet.

A cikk ötletéért köszönet illeti TGeRi-t, aki emailben hívta fel a figyelmünket arra, hogy ezzel talán tudunk segíteni a hazai oldalaknak.