Hlavní navigace

Záloha MySQL pomocí scriptu

31. 5. 2011

Sdílet

Na serveru Howtoforge.com vyšel návod na možnou zálohu vaší databáze MySQL pomocí scriptu. Zazálohuje každou tabulku pro každou databázi zvlášť v podobě komprimovaného archivu.

Script také zohledňuje dobu archivace starších verzí dle vašeho nastavení. Můžete si tak nastavit kolik dní zpětně budete mít možnost dohledat změny. Součástí návodu je i postup zpětné obnovy ze zálohy.

Našli jste v článku chybu?
  • Aktualita je stará, nové názory již nelze přidávat.
  • 31. 5. 2011 14:37

    qwerty (neregistrovaný)

    Zdravim,

    zbezne som pozrel na ten skript a zda sa mi, ze musi byt priamo v nom zapisane aj heslo k db, ktore sa pouziva ako parameter mysql* prikazov. Niekde som cital, ze nie je bezpecne zadavat heslo ako parameter, lebo ho je mozne pocas kratkej chvile vidiet cez /proc. Ja to robim tak, ze heslo pre backup usera mam v subore .my.cnf. Ale pravdu povediac neviem, ci je to bezpecnejsie a ci je v tom vobec nejaky rozdiel. Mozno by tu vedel do toho niekto vniest trochu viac svetla :-).

  • 31. 5. 2011 16:08

    Ondřej Tůma

    Přiznám se že sám mám heslo přímo ve scriptu, a bezpečnější je nejspíš heslo v .my.cnf pokud ho nepřečte nikdo jiný, než majitel souboru (nějaký backup user).

    Rozhodně ale doporučuji vytvořit speciálního backup mysql uživatele, který bude mít práva pouze ke čtení. Případný útočník sice "získá data, ale nebude je moci změnit".

  • 31. 5. 2011 19:15

    srigi

    Skript som presiel len zbezne, ale principilane ma zaujima: Ked mam webapp s kopou paralelnych userov, ako mi takyto sekvencny skript zaisti konzistenciu FK's pocas zalohovania. Ak sa prva tabulka dumpne v case T a posledna v case T+100 napr. a pocas tejto doby niekde doslo k INSERT, nemozem predsa take data obnovit.

  • 2. 6. 2011 10:01

    Wiro (neregistrovaný)

    Nijako,

    script dumpuje tabulku po tabulke. Nikde specificky nenastavuje lock celej databazy takze sa by default lockne len tabulka, ktora sa aktualne dumpuje.

    V pripade, ze dojde k insertu a nejakej funkcii cez viac tabuliek bude to v danej chvili problem.

    Dany script nieje vhodny na zalohovanie viac vytazenych databaz. Locknutie tabulky alebo aj celej databazy na celu dobu dumpu je casto pri vacsich aplikaciach nemozne, pretoze to sposobi defakto vypadok funkcionality na celu dobu zalohovania.

    U zatazenejsich databazi sa skor pouziva lvm snapshotovanie, podporuje to napriklad mysql-zrm zalohovanie. Lockne celu mysql ale len na dobu vytvarania snapshotu co je cca 1s, nasledne odlockuje a z vytvoreneho snapshotu odlieva data ktore su "zmrazene".

    V nasadeni kde sa netoleruje ani vypadok 1s sa zas pouzivaju offline replikacne servery ktore sa na dobu zalohovania zastavia a po zalohovani si doreplikuju to co sa zmenilo.

  • 31. 5. 2011 21:00

    vks

    tak to je jeste hloupejsi nez jsem cekal.
    po nahlednuti na kod me prekvapilo, ze se nekdo pokousi o neco takhle hloupeho.

    cekal jsem nejakou aplikaci v jazyce C, nebo v nejakem skriptovacim jazyce, ktery se k tomuto ucelu pouziva, a bude se pouzivat api mysql.

    dale bych cekal, ze mezi mysql utilitama bude nejaký uz hotový tool, ktery bude schopny udelat jednoduse dump s ohlidanim konzistence dat.

    OT: nechapu, proč phpkaři stále používají tak hloupý databázový systém.

  • 1. 6. 2011 2:59

    andrej (neregistrovaný)

    backup:
    mysqldump -u [username] -p [databasename] > [databasename].sql

    restore (predpoklada prazdnu databazu [databasename]):
    mysql -u [username] -p [databasename] < [databasename].sql

    password sa v oboch pripadoch zadava cez konzolu. pre scriptovanie je nutne zadat ho do konfigu ktory bude
    rw- --- --- root root

Byl pro vás článek přínosný?

Autor zprávičky