2013-01-08 296 views
0

我正在創建一個可以從終端運行的部署腳本,它會自動從存儲庫部署我的站點。我已經確定的步驟是:在shell腳本中執行MySQL命令?

  • 連接到遠程服務器通過SSH
  • 從遠程倉庫獲取最新版本的網站
  • 運行任何SQL補丁
  • 清理和退出

我已經將SSH連接和git pull命令放在我的shell文件中,但是我堅持的是MySQL,它是一個(交互式?)shell本身。所以在我的文件中,我有:

#!/bin/bash 

# connect to remote server via SSH 
ssh [email protected]$SSH_HOST 

# update code via Git 
git pull origin $GIT_BRANCH 

# connect to the database 
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME 

# run any database patches 
# disconnect from the database 
# TODO 
exit 0 

正如你所看到的,我連接到數據庫,但不知道如何執行任何MySQL語句。

目前,我有一個包含數字順序SQL修補程序的目錄。所以1.sql,2.sql等等。然後在我的數據庫中,我有一張表格,它只記錄要運行的最後一個補丁。所以我需要做一個SELECT聲明,讀取最後一個要運行的補丁,然後運行任何必要的補丁。

  1. 如何在我的shell腳本中向mysql提示發出SELECT聲明?
  2. 那麼正常流量是多少?關閉連接並重新打開它,傳遞一個補丁文件作爲輸入?或者在一個連接中運行所有必需的修補程序?
  3. 我假設我會檢查最後一個補丁文件,併爲其間的任何補丁執行do循環?

這裏的幫助將不勝感激。

+0

的'ssh'命令也會給你一個交互式shell。您還需要將命令輸入SSH,或者讓它在遠程計算機上執行特定文件。 –

+0

這可能是一個很好的答案給你:[如何從shell腳本執行Mysql命令?](http://stackoverflow.com/questions/8055694/how-to-execute-mysql-command-from-a-shell-腳本)*從另一個stackoverflow問題 –

回答

0

你可以使用Perl或類似的方式從mysql獲得輸出。這可以用來做你的控制流。

將你的mysql命令放到一個文件中,就像你輸入它們一樣。

然後以:mysql -u <user> -p -h <host> < file.sqlcommands運行。

您還可以使用'-e'在mysql命令行上進行查詢。把你的'選擇最大(補丁)'。'並在腳本中讀取輸出。

+0

這將如何工作,因爲我需要然後遍歷文件系統,解析我的補丁文件的內容,然後執行它們作爲MySQL語句? –

+0

你把整個補丁文件作爲輸入。看看'mysqldump'的輸出來看看。 – ethrbunny

+0

但補丁將是單個文件,而不是一個完整的。所以說,要運行的最後一個補丁可能是** 5.sql **(如數據庫表中記錄的那樣),但是我創建了** 6.sql **和** 7.sql ** - I '**喜歡** 6.sql **和** 7.sql **因此被運行。 –

0
cat *.sql | mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME 
1

假設你想要做的所有的企業,在遠程端:

ssh [email protected]$SSH_HOST << END_SSH 
git pull origin $GIT_BRANCH 
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME << END_SQL 
<sql statements go here> 
END_SQL 
END_SSH