簡體   English   中英

使用 shell 腳本執行多個 MySQL 命令的更好方法

[英]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種方法。


1.使用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"

2.使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM