mysqldumpで特定のレコードだけエクスポートする
·2 分で読めます
忙しい人向けまとめ
- mysqldumpの
--whereオプションを使うと特定のレコードだけmysqldumpできる --whereにはLIMIT句も指定できる--whereオプションで大量のデータから一部だけをmysqldumpすることが可能
本文
mysqldump、データだけエクスポートしたりCREATE TABLEだけエクスポートできたり細かいところまで気が利いているなぁと思うツール。今日知ったのは --whereでdumpするレコードを限定できるよ、ということ。さらに、--whereにはLIMITも指定できるので、「特定の条件にマッチするレコード100件だけ」みたいなエクスポートもできる。
以下、具体例。
$ mysql -u <user> -p<password> <database>
mysql> CREATE TABLE hoge (
id INT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO hoge VALUES (1, 'foo'), (2, 'bar'), (3, 'baz');こんな感じでレコードを作って、--where 'id=1'を指定してmysqldumpしてみる。
$ mysqldump -u<user> -p<password> <database> hoge --where 'id=1'
(snip)
LOCK TABLES `hoge` WRITE;
/*!40000 ALTER TABLE `hoge` DISABLE KEYS */;
INSERT INTO `hoge` VALUES (1,'foo');
/*!40000 ALTER TABLE `hoge` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
(snip)id=1のレコードだけmysqldumpされる。では次にORDER BYとLIMITをつけてみる。
$ mysqldump -u <user> -p<password> <database> hoge --where 'id>=2 ORDER BY id DESC LIMIT 1'
(snip)
INSERT INTO `hoge` VALUES (3,'baz');
(snip)となって、idの降順でソートして1件だけmysqldumpができた。
まとめ
プログラムの動作検証のためにデータをmysqldumpしたいけど、本番データだとレコード数が多くて丸ごとmysqldumpするのがつらい時に--whereをつけると幸せになれるはず。
関連記事
HerokuでMySQL 5.7系を使う方法
2016-09-15
MySQL Casual Talks vol.9でしゃべってきた
2016-01-23
Amazon RDS for Aurora 東京ローンチ記念セミナー
2015-11-12