MySQL Dump git hook-ból

Készítettem egy kis futtatható git hook-ot, ami a MySQL adatbázisom tartalmát teszi be egy sql fájlba. Azt ajánlják, hogy az adatbázis szerkezete és a tartalma külön fájlokban legyen, de én ezzel annyira most nem törődtem... Igazából ha a séma változik, akkor a tartalom is, ha a tartalom változik, akkor már mondjuk nem igaz ugyanez. Azért nem tartom fontosnak külön fájlba szedni ezeket, mert úgyis leírom a szerkezetváltozásokat a commit szövegébe...

#!/bin/sh
cd "$(git rev-parse --show-toplevel)"
rm -f "backup.sql"
exec "absolute/path/to/mysqldump.exe" --skip-comments -u myuser --password=mypass mydb |sed 's$),($),\n($g' > "backup.sql"
exit
(Sajnos a google syntax highlighter nincs a helyzet magaslatán, az & gt; helyett képzeljetek oda nagyobb jelet.)

A hook-ban az első sor a shell-t tölti be. Erre azt hiszem nincs szükség, mert a bash ezt alapból megteszi nekünk. Nem tudom, hogy van e lehetőség az ilyen futtatott fájloknál környezet betöltésre, ezt még ki kell tapasztalnom a későbbiekben.

A második sorban a git rev-parse --show-toplevel az aktuális repo root-ját adja. Ehhez előtte egy olyan útvonalat kell beállítanunk a cd-vel, ami benne van az aktuális repo-ban. A kezdő útvonal valószínűeg a git bash alapértelmezett útvonala, tehát a felhasználói könyvtár, ahol megoszott képek meg dokumentumok vannak, szóval az előző blog bejegyzésben leírt bat fájlt majd ki kell egészíteni az útvonal beállítással is, amennyiben ez lehetséges.

A harmadik sorban töröljük a régi sql fájlt. Erre azt hiszem nincs szükség, ahogy kitapasztaltam a .bat fájlokban a > azt jelenti, hogy felülírjuk a régi fájlt, a >> pedig azt, hogy hozzáfűzzük a tartalmat a régi fájl végéhez. Az eredeti kódban, amit átalakítottam erre a formára, benne volt az rm, ezért hagytam meg ebben is.

A negyedik sorban az új sql fájlt hozzuk létre az adatbázis aktuális állása alapján. A --skip-comments -re azért volt szükség, mert a commentek között szerepel többek között a készítés dátuma, ez pedig azt eredményezné, hogy minden egyes dump híváskor megváltozna a fájl függetlenül attól, hogy az adatbázis változott e. A user, password, database részek, illetve a dump fájl megadása evidensek, a sed-es rész pedig azt csinálja, hogy az egy sorba betömörített multi insert-et szépbontja több sorba, így minden egyes rekord-nál külön sorban jelenik meg az esetleges változás. Ennek hasznosságát azt hiszem nem kell hangsúlyoznom...

Nem sokára megpróbálkozom még extrémebb dolgokkal, mint például wsh-ban írt deploy kód futtatásával, és hasonlókkal, egyelőre azonban elég ennyi a parancssorból. :-)

Nincsenek megjegyzések:

Megjegyzés küldése