42

我试图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)
4

6 回答 6

33

这也使用 grep,但它似乎工作:

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

我在用着:

版本 10.11 Distrib 5.0.51a,适用于 debian-linux-gnu (x86_64)

于 2010-01-27T17:14:48.030 回答
12

这是在没有字符集和 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//'
于 2013-03-09T18:07:11.230 回答
7
mysql> SHOW CREATE TABLE mytablename;
于 2014-10-31T14:44:51.503 回答
5
mysqldump --compact --no-set-names --skip-opt --no-data DB | sed "/ SET /d"
于 2013-06-04T04:45:28.130 回答
1

您是否尝试过手册中提到的 --skip-comments 选项?它有帮助吗?

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_comments

于 2009-12-03T19:04:04.263 回答
0

使用--skip-set-charset选项。

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_set-charset

于 2012-11-19T12:17:39.993 回答