我有一个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添加前缀。
我有什么想法可以纠正我的做法?
答案 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的系统()进行调用。