En supposant que vous ayez déjà un référentiel git, procédez comme suit dans un script shell ou autre :
#!/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
Ensuite, démarrez ce script quotidiennement à partir d'une tâche cron ou autre.
EDIT :En plaçant un script dans $gitdir/hooks/pre -commit (le nom est important), le script sera exécuté avant chaque commit. De cette façon, l'état du schéma de base de données est capturé pour chaque validation, ce qui est logique. Si vous exécutez automatiquement ce script sql à chaque fois que vous vous engagez, vous exploserez votre base de données, ce qui n'a aucun sens.
#!/bin/sh
Cette ligne spécifie qu'il s'agit d'un script shell.
mysqldump -u DBUSER -pDBPASSWORD DATABASE --no-data=true> SQLVersionControl/vc.sql
C'est la même chose que dans ma réponse ci-dessus; prendre le DDL uniquement de la base de données et le stocker dans un fichier.
git add SQLVersionControl/vc.sql
Cela ajoute le fichier SQL à chaque validation effectuée dans votre référentiel.
exit 0
Cela quitte le script avec succès. C'est peut-être dangereux. Si mysqldump
ou git add
échoue, vous risquez de détruire quelque chose que vous vouliez conserver.