[英]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.