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出力を行う必要がある。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください