忙しい人向けまとめ
- 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
をつけると幸せになれるはず。