在bash脚本中执行多个MySQL查询

时间:2015-06-08 18:50:24

标签: mysql bash

我需要通过与我们公司的结算系统相关的cron运行每月bash脚本。这是通过两个存储过程完成的。当我通过My​​SQL控制台和工作台运行它们时,它们工作正常。

我看过this article,这基本上就是我这样做的方式。

我通过cron调用,这是一个看起来像这样的shell脚本:

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase < /path/to/billing_periods.sql

我的文本文件包含其中的命令:

call sp_start_billing_period();
call sp_bill_clients();

第一个查询会运行,但第二个第二个查询运行,不会发生。

我可以创建一个包含这两个的存储过程 - 但我只是希望了解为什么会发生这种情况......也许是我犯了一个错误或者限制了你这样做...

我也考虑过这样做(两次调用MySQL shell):

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();"

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_bill_clients();"

2 个答案:

答案 0 :(得分:0)

我认为您只能在输入的.sql文件中执行单个语句,请参阅-e语句的mysql文档(联机帮助页)。

·   --execute=statement, -e statement
      Execute the statement and quit. The default output format is like that produced with --batch. 

-e是隐含的。至少当我做不同的mysql查询时,我把它们放在你自己的脚本中就像你已经建议的那样。

答案 1 :(得分:0)

您可以尝试用分号分隔每个语句。

mysql -h 192.168.1.1 -u<username> -p<password> mydatabase -e "call sp_start_billing_period();call sp_bill_clients();"

如果您的陈述在文件中,您可以这样做:

while read LINE; do mysql -u<username> -p<password> mydatabase -e"$LINE";echo "-----------";done < statements.sql