Amazon RDSで実行されているmysqlデータベースがあり、テーブル全体をcsv形式にエクスポートする方法を知りたいです。現在、Windowsでmysqlサーバーを使用してAmazonデータベースを照会していますが、エクスポートを実行しようとすると、おそらくAmazon RDS専用のファイルサーバーがないため、エラーが発生します。これに対する解決策はありますか?
おそらく、あなたは Amazon RDS データベースからSELECT ... INTO OUTFILE
クエリを介してエクスポートしようとしています。 データベースをCSVにエクスポート 。それぞれの AWSチームの応答 は、そのようなエクスポートを妨げるサーバーアクセスがないという仮定を確認し、データのエクスポートによる代替アプローチも提案しますmysqlコマンドラインクライアントでデータを選択し、出力をパイピングしてCSVとしてデータを再フォーマットすることによるCSV形式
mysql -u username -p --database=dbname --Host=rdshostname --port=rdsport --batch
-e "select * from yourtable"
| sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > yourlocalfilename
ユーザーfpalero は、フィールドを事前に知って指定している場合は、代替手段 およびおそらくより単純なアプローチを提供します。
mysql -uroot -ppassword --database=dbtest
-e "select concat(field1,',',field2,',',field3) FROM tabletest" > tabletest.csv
がんばろう!
RDSでMySQLを使用する場合、代替方法は、TABモードで区切られた値を出力し、改行、タブ、その他の特殊文字をエスケープするバッチモードを使用することです。 TABで区切られたデータを処理できないCSVインポートツールをまだ使用していません。たとえば、次のとおりです。
$ mysql -h myhost.rds.amazonaws.com -u user -D my_database -p --batch --quick -e "SELECT * FROM my_table" > output.csv
上記のHalfgaarで述べたように、--quick
オプションはすぐにフラッシュするため、大きなテーブルのメモリ不足エラーを回避できます。文字列を引用するには(推奨)、クエリで少し余分な作業を行う必要があります。
SELECT id, CONCAT('"', REPLACE(text_column, '"', '""'), '"'), float_column
FROM my_table
REPLACE
は、text_column
値の二重引用符をエスケープします。日時フィールドにiso8601文字列を使用することもお勧めします。
SELECT CONCAT('"', DATE_FORMAT(datetime_column, '%Y%m%dT%T'), '"') FROM my_table
NULL列値がある場合、CONCATはNULLを返すことに注意してください。
かなり大きなテーブルで妥当なパフォーマンスでこれを実行しました。 RDSインスタンスと同じVPCでmysqlコマンドを実行すると、600M行と23GBデータが約30分かかりました。
まず第一に、Steffenの答えはほとんどの場合うまくいきます。
最近、「sed」では不十分な、より大きく複雑な出力に遭遇したため、まさにそれを行うためのシンプルなユーティリティを考案することにしました。
MySQL CLIの出力を解析できるsql2csvというモジュールを作成します。
$ mysql my_db -e "SELECT * FROM some_mysql_table"
+----+----------+-------------+---------------------+
| id | some_int | some_str | some_date |
+----+----------+-------------+---------------------+
| 1 | 12 | hello world | 2018-12-01 12:23:12 |
| 2 | 15 | hello | 2018-12-05 12:18:12 |
| 3 | 18 | world | 2018-12-08 12:17:12 |
+----+----------+-------------+---------------------+
$ mysql my_db -e "SELECT * FROM some_mysql_table" | sql2csv
id,some_int,some_str,some_date
1,12,hello world,2018-12-01 12:23:12
2,15,hello,2018-12-05 12:18:12
3,18,world,2018-12-08 12:17:12
組み込みのCLIを使用することもできます。
sql2csv -u root -p "secret" -d my_db --query "SELECT * FROM some_mysql_table;"
1,12,hello world,2018-12-01 12:23:12
2,15,hello,2018-12-05 12:18:12
3,18,world,2018-12-08 12:17:12
私はYii RDS mySQLに接続するEC2のフレームワークを使用しています。キーはfputcsv()を使用することです。以下は私のローカルホストと本番の両方で完全に機能します。
$file = 'path/to/filename.csv';
$export_csv = "SELECT * FROM table";
$qry = Yii::app()->db->createCommand($export_csv)->queryAll();
$fh = fopen($file, "w+");
foreach ($qry as $row) {
fputcsv($fh, $row, ',' , '"');
}
fclose ($fh);