Ако приемем, че вече имате git repo, направете следното в shell скрипт или каквото и да било:
#!/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
се провали, може да издухате нещо, което сте искали да запазите.