MySQLのテーブルの内容をExcelに書き出す

2018-12-23

MySQL はデータベース > テーブルという形で管理されてますが,今回は特定のテーブルの内容を Excel で表示できるように CSV ファイルで書き出す方法について説明します.

SSH で MySQL にログインします.ユーザー名指定,パスワードありのオプション付きです.

terminal

$ mysql -u root -p

ログイン後,必要に応じてデータべース一覧を確認し,データベース (test_db) を選択します.

terminal

mysql> show databases;
mysql> use test_db;

必要に応じてテーブル一覧,テーブルの構造を確認し,出力したいテーブル (users) の要素に対して出力コマンドを書きます.

terminal

mysql> show tables;
mysql> desc users;
mysql> select * from users
       into outfile "/var/lib/mysql-files/users.csv"
       fields terminated by ',';

注意する点として,出力先ディレクトリは --secure-file-priv オプションによって制限がかけられているようです.この場合,以下のエラーが表示されます.

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

そのため,以下のコマンドにより予め出力先として許可されているディレクトリを調べる必要があります.

terminal

mysql> show variables like "secure_file_priv";

変数 secure_file_priv の値として持っているディレクトリには出力可能です.また,上記の操作で実行できる場合は出力先ディレクトリはデフォルトで所有者が root になっているため,出力したファイルを扱うためには root 権限を持つユーザでコピー等するか,ディレクトリの所有者を変更するなどしなければなりません.

(追記 2018/12/29)

ディレクトリの所有者はデフォルトで mysql になっているようで,これを変更してしまうと以下のエラーが出ます.

ERROR 1 (HY000): Can't create/write to file '/var/lib/mysql-files/users.csv' (Errcode: 13 - Permission denied)