Supponendo che tu abbia già un repository git, esegui quanto segue in uno script di shell o altro:
#!/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
Quindi avvia questo script su base giornaliera da un cron job o quello che hai.
EDIT:inserendo uno script in $gitdir/hooks/pre -commit (il nome è importante), lo script verrà eseguito prima di ogni commit. In questo modo lo stato dello schema DB viene catturato per ogni commit, il che ha senso. Se esegui automaticamente questo script sql ogni volta che esegui il commit, spazzerai via il tuo database, il che non ha senso.
#!/bin/sh
Questa riga specifica che si tratta di uno script di shell.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Questo è lo stesso della mia risposta sopra; prendendo il DDL solo dal database e salvandolo in un file.
git add SQLVersionControl/vc.sql
Questo aggiunge il file SQL a ogni commit effettuato nel tuo repository.
exit 0
Questo esce dallo script con successo. Questo è forse pericoloso. Se mysqldump
o git add
fallisce, potresti spazzare via qualcosa che volevi conservare.