![](/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.