Fontos dolog a backup, de biztos sokan vagytok úgy, hogy a szerver Linux és nem nagyon vágjátok a dolgot, hiszen egy webes alkalmazás fejlesztéséhez alapvetően nincs szükség mondjuk a legelterjedtebb shell, a Bash ismeretére. Megpróbálok könnyű, praktikus és érthető áttekintést adni egy szimpla backup szkript megírásához Bash-ben, Tar-ral és Lzop-pal, meg lesz MySQL dump.
Azért jó backup szkript-et írni, mert egyrészt tanulhatunk vele, másrészt pedig ingyenes eszközökkel oldható meg. Hány (szerver)backup megoldásról hallunk pénzért? Miközben alig pár órás tanulással és próbálgatással megvan a saját, a tuti. Szánj rá egy délutánt/estét/éccakát.
A legtöbbet használt shell, főleg Linux alatt, sőt a Mac OSX is ezt használja. Alapvetően ugyanúgy néz ki, mint a Windows parancssor, beírod, nyomsz egy entert és futtatja. Ha maradunk a Windows analógiánál, akkor a .bat a Bash-ben a .sh, azaz a Bash shell script-jeit .sh fájlokban kell megírni (ne félj, ugyanolyan szöveges dolog, mint a .bat).
A Bash-ben történő navigációra nincs energiám, de minimális Bash ismeretre szükséged lesz (ls [Windows "dir"], cd, echo, chmod és hasonló parancsok), ezt a tudást szerezd meg, fél óra alatt megvan kipróbálással együtt, pl. itt.
A tar program feladata becsomagolni a fájlokat vagy komplett könyvtárszerkezeteket. Úgy is tekinthetsz rá, mint egy tömörítőprogramra tömörítés nélkül: a Linux világában általában nem a tömörítőprogramok csomagolnak, mint a Windows alatt, hanem a tar, mert olyan jó. Nézzünk egy példát:
tar --create --file=/var/backups/backup.tar /var/www
A --create-tel megmondtuk, hogy hozzon létre egy tar csomagot, a --file azt mondja, hogy az eredmény a /var/backups/backup.tar fájl legyen, a végén a /var/www pedig a cél, annak a tartalmát kell lementeni. Most pedig bővítjük ezt a parancsot némi tömörítéssel:
tar --create --use-compress-program=gzip --file=/var/backups/backup.tar.gz /var/www
Egyetlen paraméter jött be, a --use-compress-program értéke megmondja, hogy melyik tömörítőprogramot használja a tar, jelen esetben a gzip nevűt.
Gyakran merül fel az az igény, hogy hagyjunk ki a mappaszerkezetből néhány (jellemzően nagyobb) fájlt vagy mappát. Ezt a legegyszerűbben így csináljuk:
tar --create --use-compress-program=gzip --exclude=/var/www/music/mp3
--file=/var/backups/backup.tar.gz /var/www
A példában az --exclude-dal kihagytuk a music/mp3 könyvtár tartalmát. Ha nem egy kifejezett mappát, hanem fájltípust hagynál ki:
tar --create --use-compress-program=gzip --exclude=/var/www/*.mp3
--file=/var/backups/backup.tar.gz /var/www
Ez kihagyja az összes mp3 fájlt, alkönyvtárra való tekintet nélkül. Az utolsó példában pedig az aktuális dátumot is betesszük az eredmény fájl nevébe, mert backup-nál ez igen hasznos:
tar --create --use-compress-program=gzip
--file=/var/backups/backup_`date +'%Y-%m-%d'`.tar.gz /var/www
A furcsás ` jelek között lévő date parancs eredménye kerül a ` jelek közé, tehát valami ilyen lesz az eredmény: backup_2008-06-25.tar.
Ezt a tömörítőt ajánlom a szerveren történő tömörítésre, mert borzasztó gyors (a leggyorsabb?) és bár nem tömörít olyan jól, egy szerver backup-nál a legfontosabb a sebesség (minél előbb túllegyünk rajta). Mások szerint is legalább négyszer gyorsabb az egyébként leggyakrabban használt gzip-nél, nálam legalább hatszor, közel 90mb/s-al számíthatsz.
Üsd be a parancssorba, hogy lzop és ha elindul, akkor fent van, ha nem, akkor telepítsd így: sudo apt-get install lzop (jelszót fog kérni). Ha megvan, akkor a tar-nál a --use-compress-program=gzip helyett szimplán --use-compress-program=lzop-ot kell írni, ennyire egyszerű.
Fájlokat és könyvtárakat most már tudsz menteni, de az adatbázist is kéne. Ezt a mysqldump program végzi, így:
mysqldump --skip-comments --quick --force --host=MYSQL_SZERVER_HOST
--user=USERNÉV --password=JELSZÓ ADATBÁZISNÉV
> /var/backups/adatbazismentes.sql
Kitöltöd a nagybetűseket és az eredmény a parancs végén található fájlba megy (/var/backups/adatbazismentes.sql). Ez egy teljes mentés, SQL parancsok formájában. Fontos, hogy a --force kapcsolóval felülírja az eredmény fájlt.
Remélem sikerült elindítani az úton. Nézegesd majd meg a fentiek kapcsolóit, lehetőségeit, próbáld ki, jöjj rá a kitömörítésre/kicsomagolásra (kell majd) és ha mindez megvan, akkor gondolkodj el a backup szkript automatikus időzítésén (crontab), valamint a backup fájlok külső helyre történő mentésén, mert ugyanazon a hardveren (sőt, ugyanabban a szerverfarmban, teremben, épületben!) nem biztonságos, én például az Amazon S3-ra tolom fel.
Tudom jól, hogy vannak rövidebb formák meg ezernyi fícsör és lehetőség, de ez egy cikk a nulláról indulók számára. Sok szeretettel várom viszont a még egyszerűbb/még jobb megoldásokat vagy a hibajavítást.
iMect means internet, media and other cool things. iMect is a small company near lake Velence, Hungary. We’ve a big footer on every page where you can discover what we do and what happens with us.
Az iMect jelentése: internet, média és egyéb király dolgok. Egy kis cég vagyunk közel a Velencei-tóhoz. Minden oldalon van egy nagy lábléc, ahol felfedezheted, hogy mivel foglalkozunk.