使用shell脚本执行多个MySQL命令的更好方法

时间:2015-09-30 14:53:03

标签: mysql bash shell

我想写一个* .sh脚本来执行多个MySQL命令。

目前,我能做的事情如下:

mysql -h$host -u$user -p$password -e "drop database $dbname;"
mysql -h$host -u$user -p$password -e "create database $dbname;"
mysql -h$host -u$user -p$password -e "another MySQL command"
...

有没有办法避免输入" mysql -h $ host -u $ user -p $ password -e"每次我想执行MySQL命令?

4 个答案:

答案 0 :(得分:22)

我认为你可以从文本文件中执行MySQL语句,例如

这是cmds.txt文件,其中包含MySQL命令:

select colA from TableA;
select colB from TableB;
select colC from TableC;

要使用shell脚本执行它们,请键入

mysql -h$host -u$user -p$password db_dbname < cmds.txt

这样,您可以将MySQL命令与shell脚本分开。

您可能希望脚本向您显示进度信息。为此,您可以使用&#34; - verbose&#34;来调用mysql。选项。

有关详细信息,请参阅https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html

答案 1 :(得分:11)

请注意,您还可以使用HERE文档在同一脚本中进行查询:

mysql -h$host -u$user -p$password db_dbname <<'EOF'
select colA from TableA;
select colB from TableB;
select colC from TableC;
EOF

请注意,我在第一行中使用了'EOF'而不是EOF,以防止脚本内容禁用参数替换(尤其是`可以有问题的)

另请注意,在最终EOF 之前应该没有任何空格(除非您使用<<-而不是<< - 在这种情况下领先标签字符被剥离):

mysql -h$host -u$user -p$password db_dbname <<- 'EOF'
↠select colA from TableA;
↠select colB from TableB;
↠select colC from TableC;
↠EOF

(将替换为制表符)。

有关HERE doc语法的详细信息,请参阅the bash documentation

答案 2 :(得分:10)

您可以使用单个多重查询:

mysql -h$host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"

只需编写;分隔的所有查询即可。他们将一个接一个地运行。

答案 3 :(得分:8)

有几种方法,在linux中你有:

来自mysql cli:

mysql> source mycmds.sql

使用管道:

echo "SELECT ..; INSERT ..;" | mysql ...

使用管道或重定向从文件执行命令:

cat file.sql | mysql ... OR mysql .. < file.sql