mySQL SELECT INTO OUTFILEとLOAD DATA INFILE関数を使用して、Webアプリケーションの簡単なインポート/エクスポート機能を作成しようとしています。mysql LOAD INFILE/OUTFILE
outfile/infilesのパスをデフォルトのmysqlパス(通常はmysql.ini定義のtmpディレクトリにあると思います)にするのが最も簡単です。
既存の輸出とは衝突を確実にしないために、私は私がOUTFILEに追加する接頭辞としてタイムスタンプのMD5を生成します。
$this->prefix = md5(time());
SELECT * INTO OUTFILE ' . $this->prefix . '-' . $table . '.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM " . $table . " WHERE 1
これまでのところは良い、私のログファイルで作成したCSVファイルを表示します
スクリプトがしかしLOAD DATA INFILE
を行おうと/var/lib/mysql/master/
、ファイルが見つかりません:
2011-06-17 14:31:35 - INFO --> Created outfile: eae77f210684ba0616c773677f707513-table.csv
2011-06-17 14:31:35 - ERROR --> mySQL Error: 2 - File 'eae77f210684ba0616c773677f707513-table.csv' not found (Errcode: 2)
が可能番目ですLOAD INFILE
とSELECT INTO OUTFILE
で異なるデフォルトの場所が使用されていますか?
私は先に進んで、LOAD INFILEコマンドでmysql tmp dirを指定しました。何らかの理由でファイルが見つからないのですが、明らかにそこにありますが、私は同じ "user 「それを読んでいると、それへの書き込み:
$ sudo find/-name '8e357dcba6557a31f9a36230c4233d1b-table.csv'
/var/lib/mysql/master/8e357dcba6557a31f9a36230c4233d1b-table.csv
2011-06-17 15:04:25 - INFO --> Created outfile: 8e357dcba6557a31f9a36230c4233d1b-table.csv
2011-06-17 15:04:25 - ERROR --> mySQL Error: 13 - File '/var/lib/mysql/master/8e357dcba6557a31f9a36230c4233d1b-table.csv' not found (Errcode: 13)
EDIT:ADDING INFILE文を
$this->prefix = md5(time());
$this->mysql_dir = "/var/lib/mysql/master/";
LOAD DATA LOCAL INFILE ' . $this->mysql_dir . $this->prefix . '-' . $table . '.csv
INTO TABLE $table
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
おかげ
「LOAD INFILE」を実行しようとしていると、両方のエラー(コード)リストに「INFO - > Created outfile: '(** outfile **の後に** Created **)と表示されるのはなぜですか?また、OUTFILEの作成に使用しているSQLを表示しているので、なぜLOADコマンドも表示されていませんか? –
これらのログエントリは自分のログノートです。これは "公式の" mysqlログファイルではありません。実際のOUTFILE文が成功コードを返したときに書き込まれます。私はload infileステートメントを投稿します。 – julio
あなたの編集後、問題はかなり明確に思われます。あなたはファイル名の一部として '$ this-> prefix = md5(time());'を使って 'OUTFILE'を作成しています。 'LOAD INFILE'はファイル名の一部として' $ this-> prefix = md5(time()); 'も使用しています。時間がまったく変わった場合、MD5の値は一致しないので、 'OUTFILE'と' INFILE'のどちらの名前も一致しません。 –