Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie Gita do śledzenia schematu mysql - kilka pytań

Zakładając, że masz już repozytorium git, wykonaj następujące czynności w skrypcie powłoki lub czymkolwiek:

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

Następnie uruchamiaj ten skrypt codziennie od zadania crona lub tego, co masz.

EDYCJA:Umieszczając skrypt w $gitdir/hooks/pre -commit (nazwa jest ważna), skrypt będzie wykonywany przed każdym commitem. W ten sposób stan schematu bazy danych jest przechwytywany dla każdego zatwierdzenia, co ma sens. Jeśli automatycznie uruchomisz ten skrypt sql przy każdym zatwierdzeniu, zniszczysz swoją bazę danych, co nie ma sensu.

#!/bin/sh

Ta linia określa, że ​​jest to skrypt powłoki.

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

To jest to samo, co w mojej odpowiedzi powyżej; pobieranie DDL tylko z bazy danych i przechowywanie go w pliku.

git add SQLVersionControl/vc.sql

Spowoduje to dodanie pliku SQL do każdego zatwierdzenia dokonanego w repozytorium.

exit 0

Powoduje to pomyślne zakończenie działania skryptu. To jest prawdopodobnie niebezpieczne. Jeśli mysqldump lub git add zawiedzie, możesz zdmuchnąć coś, co chciałeś zatrzymać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klucz obcy Sequelize.js

  2. Błąd wyrażenia regularnego Mysql #1139 przy użyciu literału -

  3. MySQL Jak wstawić do tabeli z podzapytaniem SELECT zwracającym wiele wierszy?

  4. Ustaw strefę czasową bazy danych MySQL na GMT

  5. mysql za dużo indeksów?