簡體   English   中英

從命令行將 MySQL 變量傳遞給腳本

[英]Pass MySQL variables to script from command line

我有一個 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 前綴。

有什么想法可以糾正我的方法嗎?

在您的BATCH文件中:

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

在你的SQL文件中:

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

你可以用這樣的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

這對我有用:

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()調用。

我找到了更好的解決方案。

--init-command=name SQL 連接到 MariaDB 服務器時執行的命令。

mysql --init-command="SET @foo = 1; SET @bar = 2" -e "SELECT @foo, @bar, VERSION()"

Output:

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

它還適用於文件重定向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM