sql >> Database teknologi >  >> RDS >> Mysql

Brug af Git til at spore mysql-skema - nogle spørgsmål

Hvis du antager, at du allerede har et git-repo, skal du gøre følgende i et shell-script eller hvad som helst:

#!/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

Start derefter dette script på daglig basis fra et cron-job eller hvad har du.

EDIT:Ved at placere et script i $gitdir/hooks/pre -commit (navnet er vigtigt), vil scriptet blive udført før hver commit. På denne måde fanges tilstanden af ​​DB-skemaet for hver commit, hvilket giver mening. Hvis du automatisk kører dette sql-script, hver gang du forpligter dig, vil du blæse din database væk, hvilket ikke giver mening.

#!/bin/sh

Denne linje angiver, at det er et shell-script.

mysqldump -u DBUSER -pDBPASSWORD  DATABASE --no-data=true> SQLVersionControl/vc.sql

Dette er det samme som i mit svar ovenfor; tager kun DDL fra databasen og gemmer den i en fil.

git add SQLVersionControl/vc.sql

Dette tilføjer SQL-filen til hver commit, der foretages til dit lager.

exit 0

Dette forlader manuskriptet med succes. Dette er muligvis farligt. Hvis mysqldump eller git add fejler, kan du blæse noget væk, du gerne ville beholde.



  1. Array i IN() klausul oracle PLSQL

  2. Kør MySQL INSERT Query flere gange (indsæt værdier i flere tabeller)

  3. SQL_CALC_FOUND_ROWS / FOUND_ROWS() virker ikke i PHP

  4. SQL Server AlwaysOn ( Availability Group ) Arkitektur og trin for trin installation - 4 Tilføj og fjern databasetrin