複数のMySQLコマンドを実行する* .shスクリプトを作成したいと思います。
現在、私ができることは次のようなものです
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ステートメントを実行できると思います
mySQLコマンドを含むcmds.txtファイルは次のとおりです。
select colA from TableA;
select colB from TableB;
select colC from TableC;
シェルスクリプトを使用して実行するには、次を入力します。
mysql -h$Host -u$user -p$password db_dbname < cmds.txt
このようにして、MySQLコマンドをシェルスクリプトから分離します。
スクリプトに進捗情報を表示することもできます。このために、「-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 docを使用して、同じスクリプト内でクエリを実行することもできます。
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