SQL実行結果をファイルに保存して利用したい場合に。
ターミナルの場合
リダイレクトを使って保存します。
1 2 |
$ mysql -u <ユーザー名> -p -e '<SQL>' <データベース名> > <ファイルパス> Enter password:<パスワードを入力> |
具体例を示します。
1 2 3 4 5 6 7 |
$ mysql -u user -p -e 'select * from mytable' mydatabase > ~/result.txt Enter password: $ cat ~/result.txt id myvalue 1 a 2 b $ |
mysqlクライアントの場合
実行するには下記の条件を満たす必要があります。
- 実行するmysqlユーザーはFILE権限が必要
- 出力先ディレクトリに実行・書込権限が必要
- 出力先ファイルの指定はフルパスで行う事(例:”~/result.txt” といった指定は不可)
1.については、こちらを参考にFILE権限を与えて下さい。
2.については出力先ディクレトリへmysqld実行ユーザーが書き込める権限を与えて下さい。とりあえず試したいだけでしたら、/tmp/に出力すると良いでしょう。
3.についてはフルパスで指定するしかありません。上記の例のファイルを指定するならば、”/home/user/result.txt” と記述します。
2と3について補足すると、mysqlコマンドでサーバーへ接続後に行う処理は、全てmysqld実行ユーザーが行う事になります。よって、mysqld実行ユーザーに書き込み権限がないとファイル出力できず、ログインしているユーザーのホームディレクトリを”~”で参照もできないのです。
上記を踏まえて、下記のコマンドを実行して下さい。SQL実行結果をファイルへ出力します。
1 2 3 |
$ mysql -u <ユーザー> -p <データベース名> Enter password: <パスワードを入力> mysql> <SELECT文> INTO OUTFILE '<ファイル名>'; |
具体例を記します。
1 2 3 4 5 6 7 8 9 |
$ mysql -u user -p mydatabase Enter password: mysql> SELECT * FROM mytable INTO OUTFILE '/tmp/result.txt'; mysql> quit $ cat /tmp/result.txt id myvalue 1 a 2 b $ |
FIELESオプションでフィールド区切り文字(デフォルトはタブ)を変更できます。省略しますが、同様にLINESオプションで改行コードを変更出来ます。
1 2 3 4 5 6 7 |
mysql> SELECT * FROM mytable INTO OUTFILE '/tmp/result.txt' -> FIELDS TERMINATED BY ','; $ cat /tmp/result.txt id,myvalue 1,a 2,b $ |
宮崎県在住。
プログラムを書いて暮らしています。趣味はルアーフィッシング、ギター。