2015-06-08 34 views
0

我需要通過與我們公司的計費系統相關的cron運行每月bash腳本。這是通過兩個存儲過程完成的。當我通過My​​SQL控制檯和工作臺運行它們時,它們工作正常。在bash腳本中執行多個MySQL查詢

我看過this article,這基本上就是我這樣做的方式。

我通過cron調用,一個shell腳本,看起來像這樣:

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase < /path/to/billing_periods.sql 

具有命令在它看起來像這樣我的文本文件:

call sp_start_billing_period(); 
call sp_bill_clients(); 

什麼情況是,第一查詢運行,但第二行,不是。

我可以做一個包裝這兩個存儲過程 - 但我只是希望瞭解爲什麼這是怎麼回事...也許一個錯誤,我做或你這樣做的方式限制..

我也考慮過做這個(兩次調用MySQL的外殼):

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();" 

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_bill_clients();" 

回答

0

您可以嘗試用分號分隔每個語句。

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();call sp_bill_clients();" 

如果你有一個文件你的語句,你可以這樣做:

while read LINE; do mysql -u<username> -p<password> mydatabase -e"$LINE";echo "-----------";done < statements.sql 
+0

我在我的迴應非常晚,我深表歉意。你的建議很完美,謝謝! - –

0

我想你只能在你的輸入來執行一個語句.sql文件,請參閱-e聲明MySQL文檔(聯機幫助頁)。

· --execute=statement, -e statement 
     Execute the statement and quit. The default output format is like that produced with --batch. 

的-e是隱含的。至少當我做不同的mysql查詢時,我把它們放在他們自己的腳本中,就像你已經建議的一樣。