コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

MySQLでデータは複製せず、テーブル構成だけを複製する場合、no-dataオプションでmysqldumpすると良い

既存のデータベースにRailsアプリケーションを導入すると、もともとmigrationがないからテスト用のschema作れないとかそういうことがあるので、そこらへんに対するアプローチ。

環境

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.24, for osx10.14 (x86_64) using  EditLine wrapper

やり方

--no-data または省略形の -d を使う。

実例

$ mysqldump -u root sample_app_development --no-data > no_data_dump.sql

試しにオプションをつけないものとdiffをとる

$ mysqldump -u root sample_app_development> dump.sql
$ diff dump.sql no_data_dump.sql 
# (中略)
109,118d78
< 
< --
< -- Dumping data for table `users`
< --
< 
< LOCK TABLES `users` WRITE;
< /*!40000 ALTER TABLE `users` DISABLE KEYS */;
< INSERT INTO `users` VALUES (1,NULL,'2018-12-25 15:54:06','2018-12-25 15:54:06'),(2,NULL,'2018-12-25 16:58:08','2018-12-25 16:58:08'),(3,NULL,'2018-12-25 16:58:57','2018-12-25 16:58:57'),(4,NULL,'2018-12-25 17:02:05','2018-12-25 17:02:05'),(5,NULL,'2018-12-25 17:02:06','2018-12-25 17:02:06'),(6,NULL,'2018-12-25 17:02:11','2018-12-25 17:02:11'),(7,'Taro','2018-12-25 17:12:10','2018-12-25 17:12:10'),(8,'Taro','2018-12-25 17:12:42','2018-12-25 17:12:42');
< /*!40000 ALTER TABLE `users` ENABLE KEYS */;
< UNLOCK TABLES;
129c89
< -- Dump completed on 2019-01-06 23:08:36
---
> -- Dump completed on 2019-01-06 23:08:28

INSERT分が no-data のほうにはないことがわかる

参考リンク