Mysqlを使用して、クエリの結果をファイルに書き込もうとしています。私はいくつかの場所でoutfileコンストラクトに関するいくつかの情報を見ましたが、これはMySQLが実行されているマシン(この場合はリモートマシン、つまりデータベースがローカルマシン上にない)にのみファイルを書き込むようです。
または、クエリを実行して、mysqlワークベンチの結果ウィンドウから結果を取得(コピー/貼り付け)しようとしました。これは小さなデータセットの一部で機能しましたが、最大のデータセットが大きすぎてメモリ不足の例外/バグ/クラッシュを引き起こしているようです。
この問題に関する助けをいただければ幸いです。
ローカルCLIからクエリを実行して、出力をローカルファイルの宛先にリダイレクトすることができます。
mysql -user -pass -e"select cols from table where cols not null" > /tmp/output
これは、データベースと対話するために使用している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の下に「エクスポート」オプションもあるべきであるという兆候がありますが、それはほぼ確実にバージョンに依存しています。
MySQLクエリ結果をファイルに書き込みたい場合は、これを試すことができます。
この例では、MySQLクエリ結果をカンマ区切り形式のcsv
ファイルに書き込みます
SELECT id,name,email FROM customers
INTO OUTFILE '/tmp/customers.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
コマンドラインで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