mysqldump - 仅在没有自动增量的情况下导出结构

Par*_*ris 79 mysql export mysqldump auto-increment database-schema

我有一个MySQL数据库,我试图找到一种方法只导出其结构,没有自动增量值.mysqldump --no-data几乎可以完成这项工作,但它保留了auto_increment值.有没有办法不使用PHPMyAdmin(我知道它可以做到)?

JoD*_*Dev 62

你可以这样做 :

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,如果你想要sed正常工作,添加g(for g lobal replacement)参数,如下所示:

mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql
Run Code Online (Sandbox Code Playgroud)

(如果您已经安装了GUI工具这仅适用:mysqldump --skip-auto-increment)

  • 我不认为`--skip-auto-increment`是一个真正的选择.我在[文档](http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html)中找不到它.这个问题的两个MySQL漏洞都没有提到它:[20786](http://bugs.mysql.com/bug.php?id=20786),[30957](http://bugs.mysql.com/bug .PHP?ID = 30957).哪个版本的mysqldump有这个选项? (11认同)
  • 如果导出多个表,只导出最后一个表,则Sed选项不会删除所有自动增量.此外, - skip-auto-increment不是现有选项.这个答案如何被评为如此之高? (4认同)
  • 请"downvoters"...发表评论解释投票! (3认同)
  • 你需要在你的sed命令结束时使用ag:sed's /.../.../ g'来替换所有出现的事件. (3认同)

小智 47

通过对sed正则表达式的一个小调整,JoDev的答案非常适合我:

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
Run Code Online (Sandbox Code Playgroud)