2013-11-22 181 views
5

我有一個MySQL更新腳本我想從命令行運行,但我希望能夠將一個舞臺域變量傳遞給腳本。從命令行將MySQL變量傳遞給腳本

我知道這是行不通的,但它是我能形容我想要做的最好方法:,我使用@domain變量,更新

$ -uroot -hlocalhost mydatabase --execute "SET @domain = 'mydomain.dev' " < ./sql/update_domain.sql 

在腳本中在配置表中的一些配置變量,使用命令如下:

UPDATE my_cfg SET value = @domain WHERE name = 'DOMAIN'; 

基本上我想前綴@domain上update_domain.sql文件中的設置。

任何想法,我可以糾正我的做法?

回答

8

在批處理文件:

mysql -e "set @domain=PARAMVALUE;source ./sql/update_domain.sql" 

而且在你的SQL文件:

UPDATE my_cfg SET value = @domain WHERE name = 'DOMAIN'; 
+0

我得到一個語法錯誤,除非我把一個分號源命令後 – Jeff

+0

它看起來像這樣可能無法在MySQL 5.6中工作? 'source'以交互方式工作,但在'-e'參數中傳遞時似乎不起作用。 – ebyrob

2

這個工作對我來說:

system("(echo \"SET @domain = 'newstore.personera.abc';\"; cat sql/set_domain.sql) > /tmp/_tmp.sql") 
system("mysql -uroot -hlocalhost newstore.personera.dev < /tmp/_tmp.sql") 
system("rm /tmp/_tmp.sql") 

...與系統()調用Capistrano的。

3

你可以做到這一點與sed這樣的:

echo "UPDATE my_cfg SET value = '#domain#' WHERE name = 'DOMAIN'" | sed 's/#domain#/mydomain.dev/' | mysql -uusername -ppassword dbname 

或update.sql有UPDATE

cat update.sql | sed 's/#domain#/mydomain.dev/' | mysql -uusername -ppassword dbname 
+0

當然,如果是sh腳本,則在sed部分中使用雙引號將新值作爲變量傳遞。即'cat update.sql | sed「s /#domain#/ $ some_var /」| mysql -uusername -ppassword dbname' –

相關問題