Ugrás a főmenüre.
Web 2008.06.25. Hosting

Backup a szerveren (is)

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.
Backup a szerveren (is)

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.

Bash

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.

Tar

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.

Lzop

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

MySQL

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.

Még tovább

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.

Ha hozzászólnál

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.

6 hozzászólás

  1. idézem 2008.06.25. 01:07
    • cadmagician
    a tar gzip cuccon tulvagyok, aztán rájöttem hogy nem biztos, hogy érdemes szenvedni. tanulni persze jó. egyébként én a tar -zcf cuccot használtam.

    nálam a reoback teljesít, nagyon jól, ajánlom.

    cinkesebb a mysql. mivel összevissza vannak az adatbázisokban a charsetek, ezért igen gyakori a dumpkor az ékezetek vesztése, az utf8 latin2 sucks. pl latin2_svéd táblába utf8-cal ír a wp, dumplod ki... tehát a te dumpolo sorod épp emiatt nem jó... erre kéne valami megfejtést találni.
  2. idézem 2008.06.25. 01:27
    két észrevételem lenne a cikkel kapcsolatban (ami egyébként nagyon hasznos referencia a témakörben):

    1. sudo használatánál általában nem a root jelszót kéri a rendszer, hanem a parancsot futtató, sudo jogosultságokkal rendelkező felhasználóét (gyk. a saját jelszavadat kell megadni)

    2. a tar man oldala szerint (és a tapasztalataim is ezt mutatják, mivel a parancsod lazán elszáll) a --file kapcsolóval az archívum nevét adhatod meg. tehát az első parancs megfelelő formája:

    tar --create --file=/var/backups/backup.tar /var/www

    további jó munkát, és még sok ilyen hasznos cikket! :)
  3. idézem 2008.06.25. 01:58
    • mrbond
    az sql mentese azert nem ennyire egyszeru feladat.
    plane a nagy rendszerek eseteben.
    a te megoldasod akkor fog menni, hogyha offline az app, ami az adatbazist hasznalja, mert kulonben konnyen tudsz inkonzistense tenni egy mentest (es az abol visszaallititt dbt).
    vannak online backup megoldasok amik altalban azon alapszanak, hogy amikor a db egy snapsotjat dumpolod ki, es a mentes kozben letrejott tranzakcios logokat is elmented. ebben az esetben a mentesbol mar maradektalanul visszaallithato az adatbazis a konzisztencia megtartasa mellett (elmelei sikon).

    bovebb info az rdbms fuggo... altalaban a jo db backup penzes... ha van egyaltalan...
  4. idézem 2008.06.25. 03:12
    @cadmagician Erre régen volt valami megfejtésem, de már két éve csak UTF-8-cal dolgozok (adatbázis és kód szinten is), így erre már nem szeretnék emlékezni... még latin2->utf8 konvertert is írtam rá.

    @szilveszter Atya világ mekkora baki, nagyon köszönöm! Hűdeciki... blogot írni kutyafuttában nem szabad. Javítottam.

    @mrbond Ez a megoldás a túlnyomó többség számára príma, nagy rendszereknél valóban nem így, dehát ez egy "starter" cikk. Nagy rendszereknél érdemes egy MySQL replikát fenntartani csak backup célokra és azt dumpolni. Ha meg shardolsz, akkor még többet... így viszont egyedi megoldást kell kialakítani.
  5. idézem 2008.06.27. 01:27
    A "furcsás ` jel" az backtick ( http://hu.php.net/manual/en/language.operators.execution.php )

    Oke, hogy gyorsabb (bar sztem kevesbe ismert a Lzop) de mennyivel keszit nagyobb backup file-t? A backup altalaban ugyis ejszaka, hajnalban keszul amikor a legkisebb a terheles. Ezert en (igy h. nem is tudom mi az lzop - gzip kulonbseg) nem aldoznam be a gzip-et (lzop van windowsra? ki tudom csomizni?).

    Ha magam backupolok szoktam ilyent csinalni a tar utan: | sort > ./filelist.txt (ezzel a becsomagolt fileokrol keszul egy rendezett lista, ha vmit keresni kell, ebben joval egyszerubb).
  6. idézem 2008.06.27. 03:14
    @benjamin Az furcsás jel, magyarítok. :-)

    Az lzop 10-100%-kal nagyobb fájlt készít a gzip-nél, nálam átlag 30% az eltérés.

    Lzop természetesen van Windowsra (www.lzop.org), plusz néhány GUI-s tömörítőprogram ismeri is.

    A gyorsaság szerintem fontosabb a méretnél, persze kis terhelésnél mindegy, dehát nagyra lövünk, nemde? Nálam pl. nem mindegy, hogy a Music2Mix mentés 13 vagy 3 perc alatt fut le, sok a gigabájt.

    Filelist tippet köszönöm.
Új hozzászólás
A sortörések automatikusak. Csak az üzenet kitöltése kötelező, a többi mező opcionális. A megadott e-mail címet nem tesszük közzé. Engedélyezett HTML tagek: p, a, strong, em, blockquote, ul, ol, li, dl, dt, dd.

Legutolsó hozzászólások

DJ PLAYER Blue Edition: Gábor: Ja, és természetesen megy iPad-en is, hiszen _minden_ iOS app megy iPad-en.

DJ PLAYER Blue Edition: Gábor: Bug report-okat itt fogadunk: http://djplayer.net/page/bug_report_fixes

DJ PLAYER Blue Edition: hohand: Hello!A dj player mukodik iPad-on is?Tegnap feltettem, wifi-n athuztam ra zeneket,de amikor ranyomtam egy zeneszamra,error-t dobott es valami is!...

Uzsidoboz LED!: zo via Google Reader: vicces dolog, csak nem értem mire való

Uzsidoboz LED!: Gábor: @Benjamin Minek forogjanak? Egy falszínezőnek olyat nem kell tudnia, így is épp elég hatásosak.

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.