2013-03-27 68 views
59

我有一個MySQL數據庫,我試圖找到一種方法來導出其結構只有,沒有自動增量值。 mysqldump --no-data幾乎可以完成這項工作,但它保留了auto_increment值。有沒有辦法做到這一點,而不使用PHPMyAdmin(我知道它可以做到這一點)?mysqldump - 只有輸出結構沒有自動增量

+0

它看起來像MySQL 5.5(服務器),'--no-data'默認會省略auto_increment值。 – 2014-10-16 15:00:47

+0

@JoeyAdams你確定嗎?這不是我體驗到的行爲 – aland 2016-02-12 22:59:29

+2

@JoeyAdams MySQL 5.7。*使用--no-data時,*的mysqldump不會省略auto_increment。 – 2016-08-30 11:53:34

回答

49

你可以這樣做:正如其他人所提到

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

,如果你想sed到正常工作,加上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

+0

最後一個很好。謝謝。 – Paris 2013-03-27 11:27:16

+10

我不認爲'--skip-auto-increment'是一個真正的選擇。我無法在[documentation](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具有此選項? – Rich 2013-06-18 10:21:38

+1

'--skip-auto-increment'是MySQL GUI工具中添加的一個選項,如果沒有記錯的話。 (不知道^^)所以實際上它不是一個真正的解決方案! 但第二個內聯命令是正確的,我創建它[這裏](http://bugs.mysql。com/bug.php?id = 20786)其中話題討論** autoincrement **問題,並提供'sed'過濾的想法! – JoDev 2013-06-20 09:27:19

-1

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

+6

這還將刪除啓用的字段上的auto_increment標誌,而不僅僅是最後的auto_increment值。 – Aquarion 2014-04-01 13:23:21

+0

'--skip-opt'在[here](http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_opt)和[here。](http://bugs.mysql) .com/bug.php?id = 22941) – Chris 2014-05-22 09:35:52

3

它是--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 
+2

請注意,這也會刪除任何自動增量字段,「drop table」,字符集等。 – Deanna 2015-10-08 13:02:40

32

JoDev的回答非常完美,我有一個小的調整,以sed的常規表達:

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

感謝這篇文章,我能夠回答我的問題:

如何在我的數據庫上進行版本控制?

然後我剛剛創建的這個腳本: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和前推改變刺激我總是檢查是否有任何結構變化,我忘了在所有dbs上做。