web-dev-qa-db-ja.com

SQLクエリの結果をmysqlのファイルに書き込む

Mysqlを使用して、クエリの結果をファイルに書き込もうとしています。私はいくつかの場所でoutfileコンストラクトに関するいくつかの情報を見ましたが、これはMySQLが実行されているマシン(この場合はリモートマシン、つまりデータベースがローカルマシン上にない)にのみファイルを書き込むようです。

または、クエリを実行して、mysqlワークベンチの結果ウィンドウから結果を取得(コピー/貼り付け)しようとしました。これは小さなデータセットの一部で機能しましたが、最大のデータセットが大きすぎてメモリ不足の例外/バグ/クラッシュを引き起こしているようです。

この問題に関する助けをいただければ幸いです。

27
Ramy

ローカルCLIからクエリを実行して、出力をローカルファイルの宛先にリダイレクトすることができます。

mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
45
eroomydna

これは、データベースと対話するために使用しているSQLクライアントに依存します。たとえば、mysqlコマンドラインインターフェイスを「tee」演算子と組み合わせて使用​​して、ローカルファイルに出力できます。

http://dev.mysql.com/doc/refman/5.1/en/mysql-commands.html

tee [file_name], \T [file_name] 

SQLを実行する前に上記のコマンドを実行すると、クエリの結果がファイルに出力されます。

特にMySQL Workbenchについては、 テキスト出力へのクエリの実行 に関する記事をご覧ください。ドキュメントは表示されませんが、Queryの下に「エクスポート」オプションもあるべきであるという兆候がありますが、それはほぼ確実にバージョンに依存しています。

14
dolphy

MySQLクエリ結果をファイルに書き込みたい場合は、これを試すことができます。

この例では、MySQLクエリ結果をカンマ区切り形式のcsvファイルに書き込みます

SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
9
geekdev

コマンドラインでmysqlクエリを実行している場合。ここでは、テキストファイルにクエリのリストがあり、別のテキストファイルに出力が必要だとします。その後、これを使用できます。 [test_2はデータベース名です]

コマンド1

mysql -vv -u root -p test_2  < query.txt >  /root/results.txt 2>&1

-vvは詳細出力用です。

上記のステートメントを次のように使用する場合

コマンド2

mysql -vv -u root -p test_2  < query.txt  2>&1 >  /root/results.txt

STDERRを通常の場所(つまり端末上)にリダイレクトし、STDOUTを出力ファイル(この場合はresults.txt)にリダイレクトします

最初のコマンドは、エラーが発生してそこで停止するまでquery.txtを実行します。

これがリダイレクトの仕組みです。あなたが試すことができます

#ls key.pem asdf > /tmp/output_1 2>&1 /tmp/output_2

ここでは、key.pmファイルが存在し、asdfは存在しません。ファイルをcatすると、次のようになります

# cat /tmp/output_1
key.pem
#cat /tmp/output_2
ls: cannot access asdf: No such file or directory

しかし、これで前のステートメントを変更すると

ls key.pem asdf > /tmp/output_1 > /tmp/output_2 2>&1

次に、output_2でエラーと出力の両方を取得します

cat /tmp/output_2

ls: cannot access asdf: No such file or directory
key.pem
2