Angenommen, Sie haben bereits ein Git-Repo, tun Sie Folgendes in einem Shell-Skript oder was auch immer:
#!/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
Starten Sie dann dieses Skript täglich von einem Cron-Job oder was auch immer.
BEARBEITEN:Durch Platzieren eines Skripts in $gitdir/hooks/pre -commit (der Name ist wichtig), das Skript wird vor jedem Commit ausgeführt. Auf diese Weise wird der Zustand des DB-Schemas für jeden Commit erfasst, was sinnvoll ist. Wenn Sie dieses SQL-Skript jedes Mal automatisch ausführen, wenn Sie einen Commit ausführen, werden Sie Ihre Datenbank wegblasen, was keinen Sinn ergibt.
#!/bin/sh
Diese Zeile gibt an, dass es sich um ein Shell-Skript handelt.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Dies ist dasselbe wie in meiner obigen Antwort; nur die DDL aus der Datenbank nehmen und in einer Datei speichern.
git add SQLVersionControl/vc.sql
Dies fügt die SQL-Datei zu jedem Commit hinzu, das zu Ihrem Repository gemacht wird.
exit 0
Dadurch wird das Skript erfolgreich beendet. Dies ist möglicherweise gefährlich. Wenn mysqldump
oder git add
fehlschlägt, können Sie etwas wegblasen, das Sie behalten wollten.