それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

MySQLでシェル(bash/sh)からSQLを実行する方法

シェルスクリプトからMySQLSQLを実行する

いくつか方法はある。

1.SQL 文 を eval するもの

MySQLインタラクティブシェルと同じように実行する。

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>