mysqldump - Export structure only without autoincr

2019-01-13 04:17发布

I have a MySQL database and I am trying to find a way to export its structure only, without the auto increment values. mysqldump --no-data would almost do the job, but it keeps the auto_increment values. Is there any way to do it without using PHPMyAdmin (that I know it can do it)?

6条回答
beautiful°
2楼-- · 2019-01-13 04:23

JoDev's answer worked perfectly for me with a small adjustment to the sed regular expression:

mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
查看更多
等我变得足够好
3楼-- · 2019-01-13 04:27

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

查看更多
▲ chillily
4楼-- · 2019-01-13 04:37

You can do this :

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

As mentioned by others, If you want sed to works properly, add the g (for global replacement) parameter like this :

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

(this only works if you have GUI Tools installed: mysqldump --skip-auto-increment)

查看更多
ら.Afraid
5楼-- · 2019-01-13 04:39

Thanks to this post, I was able to answer my question:

How can I do version control on my db?

Then I just created this script: 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"

Then I added this to crontab:

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

Then in my repo I added the result, db_structure.sql to git and before pushing changes to prod I always check if there's any structural changes I forgot to do on all dbs.

查看更多
别忘想泡老子
6楼-- · 2019-01-13 04:41

Just to use --add-drop-table like this:

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

see mysql bugs and mysql dev

查看更多
别忘想泡老子
7楼-- · 2019-01-13 04:43

It is --create-options, which is included with --opt, by default, which generates the AUTO_INCREMENT table definitions.

If you only want the base tables,

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

If you want views, triggers and routines too,

mysqldump -hlocalhost -uuser -ppass \
    --skip-opt --events --routines --no-data \
    schemaname
查看更多
登录 后发表回答