2011-04-02 68 views
1

隨着MKB用戶的幫助下,我已經建立這個pre-commit鉤子:mysqldump - git hook - 它允許什麼?

#!/bin/bash -e 

DBHOST=dbhost.yourdomain.com 
DBUSER=dbuser 
DBPASS=dbpass 
DBNAME=dbname 

mysqldump -h $DBHOST -u $DBUSER -p $DBPASS -d $DBNAME > sql-version-control/schema.sql 
# the -h means host. 
# the -u means user. 
# the -p means pass. 
# the -d means database name (same as "no data"). 
git add sql-version-control/schema.sql 

至於我能理解:

mysqldump -h $DBHOST -u $DBUSER -p $DBPASS -d $DBNAME > sql-version-control/schema.sql 

會去到我的共享(或本地)主機,會在那裏做一個原來的模式的備份?

但是,我們經常在本地更改模式,然後我們需要在遠程服務器上應用這些更改。

有沒有反正我可以做到這一點遵循這條道路? 或者有更好的方法來完成預期的目標?

在此先感謝

+0

如果事情是不明確的,請讓我知道爲好。我會很高興地回答這個問題。謝謝。 :) – MEM 2011-04-02 19:40:36

+0

mysqldump導出整個數據庫,包括數據。我也爲你找到了這個:http://www.edmondscommerce.co.uk/git/using-git-to-track-db-schema-changes-with-git-hook/ – lucifurious 2011-04-02 19:53:45

+0

事實上,它也是在那是我寫的這個。但在你提供的鏈接上,它也使用mysqdump。我相信我們可以在不導出數據的情況下使用mysqldump,比如當我們使用標誌-d(根據mkb)或者根據那個鏈接,當我們使用另一個標誌時。無論如何,我的問題是,無論是所有的數據還是隻有模式,我需要一種方法來同步本地和遠程數據庫,我不確定像這樣的鉤子是否會幫助我。它似乎只在一個方向上工作,作爲備份任務,但沒有更多的那... – MEM 2011-04-02 19:57:10

回答

0

以此作爲您的預提交鉤子來自動備份您的數據庫提供一個新的變更時到Git:https://gist.github.com/wilcollins/dfa33ef20caf6dab5826

由於DB模式的變化通常加上回購更改支持數據庫更改,這個系統保持遠程&本地環境儘可能多的同步。

#!/bin/bash -e 
# -e means exit if any command fails 
DBHOST=address.to.your.server 
DBUSER=username 
DBPASS=password # do this in a more secure fashion 
DBNAME=DBNAME 
GITREPO=/where/is/your/repo 
DUMP=$GITREPO/where/you/store/dumps 
NEW=$DUMP/schema.sql 
OLD=$NEW.old 

DIR=$(pwd) 
cd $GITREPO 

mv $NEW $OLD 

mysqldump -h $DBHOST -u $DBUSER -p$DBPASS $DBNAME --skip-dump-date --single-transaction > $NEW 

# NOTE : the new schema.sql file & location need to be added to your GIT repo & ignore .old 

if cmp -s $OLD $NEW; then 
    echo Same 
else 
    echo Differ 
    git commit $NEW -m "$DBNAME DB update" 
    echo "schema+data committed" 

    git push # assuming you have a remote to push to 
    echo "schema+data pushed" 
fi 
cd $DIR 

那麼你可以導入新schema.sql當你拉回購改變