从命令行将MySQL变量传递给脚本

时间:2013-11-22 12:50:09

标签: mysql command-line command-line-arguments

我有一个MySQL更新脚本我想从命令行运行,但我希望能够将一个阶段域变量传递给脚本。

我知道这不起作用,但这是我描述我想要做的最好的方式:

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

在脚本中,我使用@domain变量,使用如下命令更新配置表中的一些配置变量:

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

基本上我想在update_domain.sql文件中为SET @domain添加前缀。

我有什么想法可以纠正我的做法?

3 个答案:

答案 0 :(得分:9)

在您的BATCH文件中:

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

在你的SQL文件中:

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

答案 1 :(得分: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

答案 2 :(得分: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的系统()进行调用。