Zakładając, że masz już repozytorium git, wykonaj następujące czynności w skrypcie powłoki lub czymkolwiek:
#!/bin/bash -e
# -e means exit if any command fails
DBHOST=dbhost.yourdomain.com
DBUSER=dbuser
DBPASS=dbpass # do this in a more secure fashion
DBNAME=dbname
GITREPO=/path/to/git/repo
cd $GITREPO
mysqldump -h $DBHOST -u $DBUSER -p$DBPASS -d $DBNAME > $GITREPO/schema.sql # the -d flag means "no data"
git add schema.sql
git commit -m "$DBNAME schema version $(`date`)"
git push # assuming you have a remote to push to
Następnie uruchamiaj ten skrypt codziennie od zadania crona lub tego, co masz.
EDYCJA:Umieszczając skrypt w $gitdir/hooks/pre -commit (nazwa jest ważna), skrypt będzie wykonywany przed każdym commitem. W ten sposób stan schematu bazy danych jest przechwytywany dla każdego zatwierdzenia, co ma sens. Jeśli automatycznie uruchomisz ten skrypt sql przy każdym zatwierdzeniu, zniszczysz swoją bazę danych, co nie ma sensu.
#!/bin/sh
Ta linia określa, że jest to skrypt powłoki.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
To jest to samo, co w mojej odpowiedzi powyżej; pobieranie DDL tylko z bazy danych i przechowywanie go w pliku.
git add SQLVersionControl/vc.sql
Spowoduje to dodanie pliku SQL do każdego zatwierdzenia dokonanego w repozytorium.
exit 0
Powoduje to pomyślne zakończenie działania skryptu. To jest prawdopodobnie niebezpieczne. Jeśli mysqldump
lub git add
zawiedzie, możesz zdmuchnąć coś, co chciałeś zatrzymać.