作成日: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 ~~~」ってほうなら多分イケると思う。