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

使用shell脚本执行多个MySQL命令的更好方法,mysql,bash,shell,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命令时都键入

我想写一个*.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命令时都键入“mysql-h$host-u$user-p$password-e”

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

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

只需编写所有查询,并用
分隔。它们将一个接一个地运行

在linux中,有几种方法:

从mysql cli:

mysql> source mycmds.sql
使用管道:

echo "SELECT ..; INSERT ..;" | mysql ...
使用管道或重定向从文件执行命令:

cat file.sql | mysql ... OR mysql .. < file.sql
cat file.sql | mysql。。。或mysql..
例如,我认为您可以从文本文件执行MySQL语句

以下是包含MySQL命令的cmds.txt文件:

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-h$host-u$user-p$password db_dbname
通过这种方式,可以将MySQL命令与shell脚本分离

您可能希望脚本向您显示进度信息。为此,您可以使用“-verbose”选项调用mysql


有关更多信息,请参见

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


mysql-h$host-u$user-p$password db\u dbname您所有的答案都很好。我选择EricWang的答案是因为我认为这是做这项工作最结构化的方式。你能告诉我这个解决方案是否在单独的事务中执行每条语句吗?@Mike我认为你的所有答案都很好。我选择EricWang的答案是因为我认为这是做这项工作最有条理的方式,也是最完整的答案。(除了进度信息的
--version
之外,它还包含EricWang的答案。)与通用
.txt
相比,使用
.sql
作为sql结尾应该更可取,以避免信息丢失(除非支持动态格式检测)。所有答案都很棒。我选择EricWang的答案是因为我认为这是做这项工作最有条理的方式。谢谢你的好解决方案!使用bash时,如果我在结束EOF之前放了一个制表符,我会收到一个错误,但是如果没有它,一切都很顺利。