何もオプションを付けずにmysqldumpすると
1 2 3 4 5 6 7 8 9 10 11 12 |
DROP TABLE IF EXISTS `users`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; |
となります。AUTO_INCREMENTの初期値が引き継がれてしまっていて邪魔ですね。
1 |
mysqldump --skip-opt -u hoge -p hoge_db |
とすればすっきりしたdumpが吐出されます。
1 2 3 4 5 6 7 8 9 10 11 |
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ); /*!40101 SET character_set_client = @saved_cs_client */; |
でもDBエンジンとか文字エンコーディングとかが抜けてると、使い物にならないですね。そこでこうするらしいです。
1 |
mysqldump --opt --single-transaction -u hoge -p -d hoge_db | sed 's/ AUTO_INCREMENT=[0-9]*\b//' |
1 2 3 4 5 6 7 8 9 10 11 12 |
DROP TABLE IF EXISTS `users`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; |
sedで文字列変換なんて、なかなかの力技!
参考
stackoverflow – mysqldump – Export structure only without autoincrement