sql >> Databasteknik >  >> RDS >> Mysql

Använder Git för att spåra mysql-schema - några frågor

Förutsatt att du redan har ett git-repo, gör följande i ett skalskript eller vad 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

Börja sedan det här skriptet dagligen från ett cron-jobb eller vad har du.

EDIT:Genom att placera ett skript i $gitdir/hooks/pre -commit (namnet är viktigt), kommer skriptet att köras före varje commit. På så sätt fångas DB-schemats tillstånd för varje commit, vilket är vettigt. Om du automatiskt kör detta sql-skript varje gång du commit, kommer du att blåsa bort din databas, vilket inte är vettigt.

#!/bin/sh

Den här raden anger att det är ett skalskript.

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

Detta är samma som i mitt svar ovan; tar endast DDL från databasen och lagrar den i en fil.

git add SQLVersionControl/vc.sql

Detta lägger till SQL-filen till varje commit som görs till ditt arkiv.

exit 0

Detta lämnar manuset med framgång. Detta är möjligen farligt. Om mysqldump eller git add misslyckas, kan du spränga bort något du ville behålla.



  1. Hur infogar jag korrekt flera rader i PG med nod-postgres?

  2. Hur man korrekt skriver UTF-8-strängar i MySQL via JDBC-gränssnittet

  3. Hur tar man bort flera rader från mysql-databasen med kryssrutan med PHP?

  4. SUBSTRING Kommando i SQL:A Primer