CSVファイルへダンプ(Linux用)
mysqldumpで、テーブルをCSVファイルへダンプするコマンドを解説する。
コマンド
コマンドは下記のとおりである。
mysqldump -u username -ppassword --tab=(出力先ディレクトリ) --fields-terminated-by=, dbname tablename
具体例
少し具体的に書こう。DB情報等が下記であったとする。
項目 | 値 |
---|---|
DBユーザ名 | pudding |
DBパスワード | qwerty123456 |
DB名 | zipcode |
Table名 | t_price |
(ダンプファイル名) | t_price.csv |
(ディレクトリパス) | /tmp/ |
このDB情報等を反映すると、下記のように書くことになる。
mysqldump -u pudding -pqwerty123456 --tab=/tmp/ --fields-terminated-by=, zipcode t_price
出力されるsqlファイル
csvへのダンプの場合、ファイルは2つ出力される。csvファイルと、sqlファイルだ。SQLファイルには、通常のデータではなく、テーブルのcreate文が出力される。上記の例だと、下記の2ファイルが出力されることになる。
- t_price.csv
- t_price.sql
CSVファイル
それぞれのファイルの中身を見ていこう。まずはCSVファイル。下記のように出力される。
1,定型,25,82 2,定型,50,92 3,定型外,50,120 4,定型外,100,140 5,定型外,150,205 6,定型外,250,250 7,定型外,500,400 8,定型外,1000,600 9,定型外,2000,870 10,定型外,4000,1180
SQLファイル
SQLファイルには、テーブルのcreate文が出力される。下記の通りだ。create文以外にも色々と出力されているが、初心者の人は気にしなくて良い。
-- MySQL dump 10.13 Distrib 5.1.73, for redhat-linux-gnu (x86_64) -- -- Host: localhost Database: zipcode -- ------------------------------------------------------ -- Server version 5.1.73 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `t_price` -- DROP TABLE IF EXISTS `t_price`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `t_price` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `teikei_or_hiteikei` varchar(255) DEFAULT NULL, `weight_less_than` int(11) DEFAULT NULL, `price` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2017-11-28 22:17:16
CSVファイルのカスタマイズ
上記の例だとCSVファイルの区切り文字はカンマだが、カスタマイズが可能だ。 --fields-terminated-by= のあとに、区切り文字にしたい文字を入れれば良い。例えば、コロン区切りにしたい場合のコマンドは以下のとおりだ。
mysqldump -u pudding -pqwerty123456 --tab=/tmp/ --fields-terminated-by=: zipcode t_price
上記コマンドで出力されるCSVファイルは以下のようになる。
1:定型:25:82 2:定型:50:92 3:定型外:50:120 4:定型外:100:140 5:定型外:150:205 6:定型外:250:250 7:定型外:500:400 8:定型外:1000:600 9:定型外:2000:870 10:定型外:4000:1180
用途
用途としては、データをExcelなどで加工したい場合などに使うと良さそうだ。
CSVファイルで出力
レンタルサーバ使用時の注意
多くのレンタルサーバの場合、この手法は使えない。
多くのレンタルサーバでは、アプリケーションサーバとDBサーバは物理的に分離されているため、DBアクセスする際は必ずリモートサーバにアクセスする形になる。そして、この手法の場合、ファイル出力先は必ずDBサーバ内になってしまう。
レンタルサーバでは、DBサーバからファイル自体にアクセスして取得することはできない。なので、この手法は使えない。mysqldumpコマンドを通してCSV出力を行う必要がある。