sql >> Database >  >> RDS >> Mysql

Git gebruiken om mysql-schema bij te houden - enkele vragen

Ervan uitgaande dat je al een git repo hebt, doe dan het volgende in een shellscript of wat dan ook:

#!/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 dit script dan dagelijks vanuit een cronjob of wat dan ook.

EDIT:Door een script in $gitdir/hooks/pre . te plaatsen -commit (de naam is belangrijk), het script wordt uitgevoerd voor elke commit. Op deze manier wordt de status van het DB-schema vastgelegd voor elke commit, wat logisch is. Als je dit sql-script automatisch uitvoert elke keer dat je commit, blaas je je database weg, wat niet logisch is.

#!/bin/sh

Deze regel geeft aan dat het een shellscript is.

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

Dit is hetzelfde als in mijn antwoord hierboven; de DDL alleen uit de database halen en in een bestand opslaan.

git add SQLVersionControl/vc.sql

Dit voegt het SQL-bestand toe aan elke commit die naar je repository is gemaakt.

exit 0

Hiermee wordt het script met succes afgesloten. Dit is mogelijk gevaarlijk. Als mysqldump of git add mislukt, blaas je misschien iets weg dat je wilde behouden.



  1. Alle niet-vertrouwde CHECK-beperkingen in SQL Server retourneren (T-SQL-voorbeeld)

  2. Meerdere tafels selecteren vs. JOIN (prestaties)

  3. PostgreSQL-functie voor laatst ingevoegde ID

  4. Dubbel gecodeerde UTF8-tekens repareren (in een utf-8-tabel)