Förutsatt att du redan har ett git-repo, gör följande i ett skalskript eller vad som helst:
#!/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
Börja sedan det här skriptet dagligen från ett cron-jobb eller vad har du.
EDIT:Genom att placera ett skript i $gitdir/hooks/pre -commit (namnet är viktigt), kommer skriptet att köras före varje commit. På så sätt fångas DB-schemats tillstånd för varje commit, vilket är vettigt. Om du automatiskt kör detta sql-skript varje gång du commit, kommer du att blåsa bort din databas, vilket inte är vettigt.
#!/bin/sh
Den här raden anger att det är ett skalskript.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Detta är samma som i mitt svar ovan; tar endast DDL från databasen och lagrar den i en fil.
git add SQLVersionControl/vc.sql
Detta lägger till SQL-filen till varje commit som görs till ditt arkiv.
exit 0
Detta lämnar manuset med framgång. Detta är möjligen farligt. Om mysqldump
eller git add
misslyckas, kan du spränga bort något du ville behålla.