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

时间:2013-03-27 10:20:07

标签: mysql export mysqldump database-schema auto-increment

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

6 个答案:

答案 0 :(得分:59)

你可以这样做:

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

(仅当您安装了GUI工具时才有效:mysqldump --skip-auto-increment

答案 1 :(得分:43)

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

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

答案 2 :(得分:4)

它是--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 \
    schemaname

答案 3 :(得分:2)

感谢这篇文章,我能够回答我的问题:

  

如何对我的数据库进行版本控制?

然后我刚创建了这个脚本:db_bkp.sh

#!/bin/sh
filename="db_structure.sql"
backupfolder="/var/www/"
fpath="$backupfolder/$filename"
usr="DBUSER"
pass="DBPASS"
db="DBNAME"
mysqldump --user=$usr --password=$pass --no-data $db | sed 's/ AUTO_INCREMENT=[0-9]*//g' > "$fpath"

然后我将其添加到crontab:

30 5 * * * sh /home/scripts/db_bkp.sh

然后在我的回购中,我将结果db_structure.sql添加到git中,在将更改推送到prod之前,我总是检查是否存在我忘记对所有dbs进行的任何结构更改。

答案 4 :(得分:0)

只需使用--add-drop-table即可,

mysqldump --no-data --add-drop-table

请参见mysql bugsmysql dev

答案 5 :(得分:-1)

mysqldump -u [USER] -p [PASSWORD] -d --skip-opt --single-transaction [DB_SCHEMA]&gt; [FILE.ESTENSIONE]