ラボ > DBMySQLOS:Linux

MySQL コンソールからSELECTの結果をエクスポート

GUIからエクスポートさせることが出来ないコトもあるのでCUIでエクスポート

作成日:2019-12-11, 更新日:2023-04-06

基本

phpMyAdminやAdminerのようなGUIを使うのが手っ取り早い・・・。
でも諸々の事情でGUIがNGで、SSHから接続して・・・ってコトをしなくちゃいけない・・・そんな時もある。

方法

下記の2パターンがあるっぽい。
・MySQLに接続後、select文にエクスポートのコマンドを追記
・MySQLの接続コマンドにselect文とエクスポートのコマンドを追記

MySQLに接続後、select文にエクスポートのコマンドを追記

where句が使えるかもよく分からんし・・・詳細は知らん。
とりあえず「INTO OUTFILE '/tmp/data.csv'」でエクスポート先を指定すればOK。
あとは、なんとなくでイケる。

  SELECT column1, column2, column3
    FROM table_name
    INTO OUTFILE '/tmp/data.csv'
  FIELDS TERMINATED BY ','
ENCLOSED BY '"'
 ESCAPED BY '"'
   LINES TERMINATED BY '\r\n';

権限の問題

▼上記のSQLを実行するとエラーが出てきた

ERROR 1 (HY000): Can't create/write to file '〇〇〇/〇〇〇.csv' (Errcode: 13)

権限の問題らしい。

とりあえず、この方法は諦めこの次の「MySQLの接続コマンドに追記する方法を試す。

MySQLの接続コマンドにselect文とエクスポートのコマンドを追記

▼こんな感じ。

mysql -h ホスト名 -u ユーザー名 -pパスワード DB名 -e "クエリ" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' > 〇〇〇/〇〇〇.csv

▼値を入れるとこんな感じ。

mysql -h 000.000.000.000 -u username -ppassword DB_HOGE -e "select * from tbl_hoge;" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' > tmd/dump.csv

CSVじゃなくTSV出力にするとき

▼「| sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g'」が不要になる。

mysql -h ホスト名 -u ユーザー名 -pパスワード DB名 -e "クエリ" > 〇〇〇/〇〇〇.csv

▼値を入れるとこんな感じ。

mysql -h 000.000.000.000 -u username -ppassword DB_HOGE -e "select * from tbl_hoge;" > tmd/dump.csv

メモ

・「select ~ INTO OUTFILE ~」って方はwhere句が使えるかどうかは不明
・「mysql -h ~~~」ってほうなら多分イケると思う。