如何使用mysqldump仅导出CREATE TABLE命令?

47

我正在尝试使用mysqldump仅导出数据库模式 -- 没有数据,没有其他SQL注释,仅包括CREATE TABLE命令。以下是到目前为止我得到的:

mysqldump -h localhost -u root -p --no-data --compact  some_db

这几乎实现了我想要的东西,但我想消除“字符集”行(例如下面示例输出中的前3行)。是否有mysqldump选项可以做到这一点?

/*!40101 SET character_set_client = @saved_cs_client */;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bar_id` int(11) DEFAULT NULL,
  `bazz` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=369348 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `bar` (
...etc.

以下是我的版本信息,以防有所需要:

mysqldump Ver 10.13 Distrib 5.1.34, for Win32 (ia32)
mysql Ver 14.14 Distrib 5.1.34, for Win32 (ia32)

2
你不能更简单地使用SQL查询 SHOW CREATE TABLE tbl_name 吗?(参见http://dev.mysql.com/doc/refman/5.0/en/show-create-table.html) - Romain
6个回答

37

这也使用grep,但它似乎有效:

mysqldump -d --compact --compatible=mysql323 ${dbname}|egrep -v "(^SET|^/\*\!)"

我正在使用:

Ver 10.11 Distrib 5.0.51a, for debian-linux-gnu (x86_64)


10
-d代表--no-data,因此这应该可以回答问题。 - Mattias Wadman

13

以下是不包含字符集和 AUTO_INCREMENT 的转储架构的命令。

mysqldump -h localhost -u root -p --no-data  YOUR_DATABASE_HERE |egrep -v "(^SET|^/\*\!)" | sed 's/ AUTO_INCREMENT=[0-9]*\b//'

以下是不包含字符集、AUTO_INCREMENT和注释的导出模式命令

mysqldump -h localhost -u root -p --no-data --compact YOUR_DATABASE_HERE |egrep -v "(^SET|^/\*\!)" | sed 's/ AUTO_INCREMENT=[0-9]*\b//'

7
mysql> SHOW CREATE TABLE mytablename;

5
mysqldump --compact --no-set-names --skip-opt --no-data DB | sed "/ SET /d"

1

谢谢您的建议。看起来很有前途,但并没有帮助到我。 - FMc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接