sql >> Databáze >  >> RDS >> Mysql

Použití Gitu ke sledování schématu mysql - několik otázek

Za předpokladu, že již máte git repo, proveďte následující ve skriptu shellu nebo cokoli jiného:

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

Potom spusťte tento skript každý den z úlohy cron nebo co máte.

EDIT:Umístěním skriptu do $gitdir/hooks/pre -commit (jméno je důležité), skript se provede před každým potvrzením. Tímto způsobem je zachycen stav schématu DB pro každé potvrzení, což dává smysl. Pokud tento skript sql automaticky spustíte pokaždé, když provedete potvrzení, vyhodíte svou databázi, což nedává smysl.

#!/bin/sh

Tento řádek určuje, že se jedná o skript Shell.

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

To je stejné jako v mé odpovědi výše; odebrání DDL pouze z databáze a jeho uložení do souboru.

git add SQLVersionControl/vc.sql

Tím přidáte soubor SQL do každého potvrzení provedeného ve vašem úložišti.

exit 0

Tím se skript úspěšně ukončí. To je možná nebezpečné. Pokud mysqldump nebo git add selže, můžete vyhodit něco, co jste si chtěli ponechat.



  1. Dotaz MYSQL / data starší než 1 týden (všechna data a časy v UTC)

  2. Oracle Locks &table locks:Jak to funguje

  3. Spravovaná knihovna ODP.NET řeší alias, ale 32bitová knihovna ano

  4. INSERT INTO vs. SELECT INTO