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

elcex8rz  于 2023-01-25  发布在  Mysql
关注(0)|答案(4)|浏览(155)

我有一个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前缀。
你知道我该怎么纠正我的做法吗?

cyej8jka

cyej8jka1#

在批处理文件中:

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

在SQL文件中:

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

8i9zcol22#

你可以像这样用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
hl0ma9xz

hl0ma9xz3#

这对我很有效:

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使用system()调用。

i2byvkas

i2byvkas4#

我找到了更好的解决办法。

  • -init-command = name连接到MariaDB服务器时执行的SQL命令。
mysql --init-command="SET @foo = 1; SET @bar = 2" -e "SELECT @foo, @bar, VERSION()"

输出:

+------+------+-------------------------------------+
| @foo | @bar | VERSION()                           |
+------+------+-------------------------------------+
|    1 |    2 | 10.6.3-MariaDB-1:10.6.3+maria~focal |
+------+------+-------------------------------------+

它也适用于文件重定向。

相关问题