Ervan uitgaande dat je al een git repo hebt, doe dan het volgende in een shellscript of wat dan ook:
#!/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
Start dit script dan dagelijks vanuit een cronjob of wat dan ook.
EDIT:Door een script in $gitdir/hooks/pre . te plaatsen -commit (de naam is belangrijk), het script wordt uitgevoerd voor elke commit. Op deze manier wordt de status van het DB-schema vastgelegd voor elke commit, wat logisch is. Als je dit sql-script automatisch uitvoert elke keer dat je commit, blaas je je database weg, wat niet logisch is.
#!/bin/sh
Deze regel geeft aan dat het een shellscript is.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Dit is hetzelfde als in mijn antwoord hierboven; de DDL alleen uit de database halen en in een bestand opslaan.
git add SQLVersionControl/vc.sql
Dit voegt het SQL-bestand toe aan elke commit die naar je repository is gemaakt.
exit 0
Hiermee wordt het script met succes afgesloten. Dit is mogelijk gevaarlijk. Als mysqldump
of git add
mislukt, blaas je misschien iets weg dat je wilde behouden.