![](/img/trans.png)
[英]Execute multiple mysql satement in shell script parallelly using GNU Parallel
[英]A better way to execute multiple MySQL commands using shell script
我想写一个 *.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语句
这是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脚本分开。
您可能希望脚本向您显示进度信息。 为此,您可以使用“--verbose”选项调用mysql。
有关更多信息,请参阅https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html
您可以使用单个多重查询:
mysql -h$host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"
只需写下您所分隔的所有查询;
。 他们将一个接一个地运行。
请注意,您还可以使用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语法的详细信息,请参阅bash文档 。
有几种方法,在linux中你有:
来自mysql cli:
mysql> source mycmds.sql
使用管道:
echo "SELECT ..; INSERT ..;" | mysql ...
使用管道或重定向从文件执行命令:
cat file.sql | mysql ... OR mysql .. < file.sql
与其他减少重复的答案不同,但
有一些方法可以减少每行命令中的选项(用户、主机 ... -u
、 -p
、 -h
...)
我知道的2种方法。
my.cnf
文件您可以将您的用户信息存储在选项文件中(例如 ~/.my.cnf 等)
[client]
user=your_username
password=your_password
# database=database_name
然后您可以使用一个选项-e
运行mysql
命令并查询
mysql -e "drop database $dbname;"
mysql -e "create database $dbname;"
mysql -e "another MySQL command"
mysql_config_editor
您可以使用mysql_config_editor
保存登录信息
mysql_config_editor set --login-path=mypath1 --host=localhost --user=root --password
然后仅使用 login-path 选项运行命令
mysql --login-path=mypath1 -e "drop database $dbname;"
mysql --login-path=mypath1 -e "create database $dbname;"
mysql --login-path=mypath1 -e "another MySQL command"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.