rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

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

2021 Nov. 07.
2021 May 17.
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


  sql結果のファイル出力

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