Supondo que você já tenha um repositório git, faça o seguinte em um script de shell ou qualquer outra coisa:
#!/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
Em seguida, inicie este script diariamente a partir de um cron job ou o que você tiver.
EDIT:Colocando um script em $gitdir/hooks/pre -commit (o nome é importante), o script será executado antes de cada commit. Dessa forma, o estado do esquema de banco de dados é capturado para cada confirmação, o que faz sentido. Se você executar automaticamente este script sql toda vez que fizer um commit, você irá destruir seu banco de dados, o que não faz sentido.
#!/bin/sh
Esta linha especifica que é um script de shell.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Isso é o mesmo que na minha resposta acima; pegando o DDL apenas do banco de dados e armazenando-o em um arquivo.
git add SQLVersionControl/vc.sql
Isso adiciona o arquivo SQL a cada confirmação feita em seu repositório.
exit 0
Isso sai do script com sucesso. Isso é possivelmente perigoso. Se
mysqldump
ou git add
falhar, você pode destruir algo que queria manter.