Suponiendo que ya tiene un repositorio git, haga lo siguiente en un script de shell o lo que sea:
#!/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
Luego inicie este script diariamente desde un trabajo cron o lo que sea.
EDITAR:colocando un script en $gitdir/hooks/pre -commit (el nombre es importante), el script se ejecutará antes de cada confirmación. De esta forma, el estado del esquema de base de datos se captura para cada confirmación, lo que tiene sentido. Si ejecuta automáticamente este script sql cada vez que se compromete, destruirá su base de datos, lo cual no tiene sentido.
#!/bin/sh
Esta línea especifica que es un script de shell.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
Esto es lo mismo que en mi respuesta anterior; tomando el DDL solo de la base de datos y almacenándolo en un archivo.
git add SQLVersionControl/vc.sql
Esto agrega el archivo SQL a cada confirmación realizada en su repositorio.
exit 0
Esto sale del script con éxito. Esto es posiblemente peligroso. Si mysqldump
o git add
falla, es posible que destruyas algo que querías conservar.