2018年10月21日日曜日

mysql select結果をcsvファイルに書き出す

2018 Oct. 21.


csvファイル書き出し

ユーザにfile権限を付与する

        $ mysql -u root -p DATABASE

        mysql> grant file on *.* to 'USER'@'localhost' ;

当該ユーザー でmysqlに接続してファイル出力する

$ mysql -u USER -p DATABASE

(カンマ区切り、二重引用符囲みで/var/lib/mysql-files/ディレクトリに出力)
    --secure-file-priv が設定された状態であれば
     SELECT @@secure_file_priv; を実行し
     出力表示されたディレクトリにCSVファイルを保存するようにする。

mysql> select * from TABLE WHERE CONDITION INTO OUTFILE "/var/lib/mysql-files/TEXTFILENAME" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\n";

(列名を先頭行につけて出力)
mysql> select 'col1','col2', ... union select * from TABLE WHERE CONDITION INTO OUTFILE "/var/lib/mysql-files/TEXTFILENAME" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\n";
     
書き込み先はmysqlユーザが書き込み権限のあるディレクトリでないと
いけない。
    /tmpディレクトリが無難。
    書込先ファイルの上書きはできない。ので、同名ファイルは削除しておく。

Output csv-file for standard-output.(二重引用符囲み無し。カンマ区切り)
$ mysql -u USER --password='PASSWORD' -e "SELECT *  from TABLE" DATABASE | sed -e 's/\t/,/g' > outfile.csv

(sample)
$ mysql --user epgrec --password='PASSWORD' -e 'SELECT path,starttime,title,description,type,channel from Recorder_reserveTbl where complete = 1 and dirty = 0 order by starttime desc' epgrec | sed -e 's/\t/,/g' > ~/video_list.csv


  sql結果のファイル出力

  $ mysql --user epgrec --password='epgrec106' epgrec > OUTFILE
  SQL文の入力待ちになったところで
  select path from Recorder_reserveTbl order by path asc ;
  \q
  と入力するとファイルが作成される。

0 件のコメント:

コメントを投稿