シェルスクリプトからMySQLでSQLを実行する
いくつか方法はある。
1.SQL 文 を eval するもの
mysql -p -u ユーザー名 データベース名 -e "SQL 文"
-e の例
takuya@atom:~$ mysql -p -u root mysql -e "select host, User, Password,plugin from user where plugin <> '';" Enter password: +------+--------+----------+----------+ | host | User | Password | plugin | +------+--------+----------+----------+ | % | takuya | | auth_pam | +------+--------+----------+----------+
対話シェルにevalさせてるので、通常の対話シェルと同じ。
2.SQLファイルを使うもの。
SQL文を使うことを前提にしたもの、こちらはshell から実行してパイプライン処理することを前提にしているので整形などがされてない。
2.1 標準入力に渡す。(echo )
標準入力にSQL文を渡せば、実行される。
echo $SQL | mysql -p
echo 実際の例
takuya@atom:~$ echo "select host, User, Password,plugin from user where plugin <> '';" | mysql -p -u root mysql Enter password: host User Password plugin % takuya auth_pam
標準入力に渡せば実行される。
2.2 標準入力に渡す方法( cat )
cat path/to/my_query.sql | grep ... | sort ... | mysql -p -u root mysql
2.3標準入力に渡す方法( リダイレクト)
mysql -p -u root mysql < path/to/my/file.sql
2.4 標準入力に渡す方法(ヒアドキュメント)
mysql -p -u root mysql <<EOF select * from example; EOF
ヒアドキュメントは、コマンドも使えるので
mysql -p -u root mysql <<EOF $( cat my_query.sql ) cat $var_name EOF
などとも出来て便利
3.ファイルの実行
mysql の対話シェルで、ファイルを読み込みたいとき。これも利用場面が多い。 ヒストリの戻るじゃ限界あるしね。
mysql> source ERROR: Usage: \. <filename> | source <filename> mysql>