我有一个MySQL数据库,我正在试图找到一种方法,只导出它的结构,而不是自动增量值。mysqldump --no-data几乎可以完成这项工作,但它保留了auto_increment的值。有没有办法不使用PHPMyAdmin (我知道它可以做到)?
发布于 2013-03-27 18:22:21
您可以这样做:
mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql正如其他人所提到的,如果您希望sed正常工作,请添加g (用于g全局替换)参数,如下所示:
mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql(只有在安装了图形用户界面工具的情况下才有效:mysqldump --skip-auto-increment)
新的更新感谢评论。
\b是无用的,有时会中断命令。有关说明,请参阅此SO topic。因此,优化后的答案是:
mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*//g' > <filename>.sql发布于 2014-10-13 02:09:30
JoDev的答案对我来说非常有效,只是对sed正则表达式做了一点小调整:
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql发布于 2014-07-09 06:09:49
它是--create-options,默认情况下包含在--opt中,用于生成AUTO_INCREMENT表定义。
如果您只想要基表,
mysql -hlocalhost -uuser -ppass --skip-column-names --batch \
-e "select table_name from tables where table_type = 'BASE TABLE' and table_schema = 'schemaname'" INFORMATION_SCHEMA \
| xargs mysqldump -hlocalhost -uuser -ppass \
--no-data --skip-triggers --skip-opt --no-create-db \
schemaname如果您还需要视图、触发器和例程,
mysqldump -hlocalhost -uuser -ppass \
--skip-opt --events --routines --no-data \
schemanamehttps://stackoverflow.com/questions/15656463
复制相似问题