すでにgitリポジトリがあると仮定して、シェルスクリプトなどで次のことを行います。
#!/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
次に、このスクリプトをcronジョブまたは何を持っているかから毎日開始します。
編集:スクリプトを$ gitdir / hooks / preに配置します -commit(名前は重要です)。スクリプトはすべてのコミットの前に実行されます。このようにして、コミットごとにDBスキーマの状態がキャプチャされます。これは理にかなっています。コミットするたびにこのSQLスクリプトを自動的に実行すると、データベースが吹き飛ばされてしまいますが、これは意味がありません。
#!/bin/sh
この行は、それがシェルスクリプトであることを示しています。
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
これは上記の私の答えと同じです。データベースからのみDDLを取得し、ファイルに保存します。
git add SQLVersionControl/vc.sql
これにより、リポジトリに対して行われるすべてのコミットにSQLファイルが追加されます。
exit 0
これにより、スクリプトが正常に終了します。これはおそらく危険です。 mysqldump
の場合 またはgit add
失敗した場合、保持したいものを吹き飛ばす可能性があります。