2013-03-27 18 views
59

Bir MySQL veritabanım var ve yapısını yalnızca otomatik artış değerleri olmadan dışa aktarmanın bir yolunu bulmaya çalışıyorum. mysqldump --no-data neredeyse işi yapacak, ancak auto_increment değerlerini koruyor. PHPMyAdmin kullanmadan bunu yapmanın herhangi bir yolu var mı (bunu yapabileceğini biliyorum)?mysqldump - Yalnızca yapılaşma olmadan dışa aktarma yapısı

+0

MySQL 5.5 (server) ile görünüyor, '--no-data' otomatik olarak auto_increment değerlerini atlayacak. –

+0

@JoeyAdams Emin misin? Bu benim davranışım değil – aland

+2

@JoeyAdams MySQL 5.7. * 'S mysqldump --no-data kullanırken auto_increment ommit etmez. –

cevap

49

Bunu yapabilirsin:

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

düzgün çalışmalarına sed istiyorsanız, başkaları tarafından belirtildiği gibi, böyle g (için gr loblu yedek) parametresini ekleyin:

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

(yalnızca GUI Araçları yüklü ise çalışır: mysqldump --skip-auto-increment)

+0

Sonuncusu harika çalıştı. Teşekkürler. – Paris

+10

Sanırım '--skip-auto-increment' gerçek bir seçenek. [Dökümantasyon] 'da bulamıyorum (http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html). Bu sorun için iki MySQL hatalarının her ikisi de şunları söylemez: [20786] (http://bugs.mysql.com/bug.php?id=20786), [30957] (http://bugs.mysql.com/bug .php? id = 30957). Mysqldump'un hangi sürümü bu seçeneğe sahip? – Rich

+1

'--skip-auto-increment', doğru bir şekilde hatırlanırsa MySQL GUI Tools'da eklenmiş bir seçenektir. (emin değil ^^) Yani aslında bu gerçekten bir çözüm değil! Ama ikinci satır içi komut doğru, ben [burada] (http: //bugs.mysql.com/bug.php? id = 20786) Burada konu ** autoincrement ** issue hakkında konuşuyor ve 'sed' filtreleme fikrini sağlıyor! – JoDev

-1

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

+6

Ayrıca, auto_increment bayrağını, yalnızca auto_increment değerini değil, etkin olduğu alanlarda da kaldırır. – Aquarion

+0

'--skip-opt' tartışıldı [burada] (http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_opt) ve [burada.] (Http: //bugs.mysql .com/bug.php? id = 22941) – Chris

3

Bu, aşağıdakileri içeren - oluşturma seçenekleridir - AUTO_INCREMENT tablo tanımlarını oluşturan varsayılan olarak seç.

sadece baz tabloları istiyorsanız,

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 

sen görünümleri, tetikleyicileri ve çok rutinleri istiyorsanız,

JoDev cevabı sed düzenli küçük bir ayarlama ile benim için mükemmel çalıştı
mysqldump -hlocalhost -uuser -ppass \ 
    --skip-opt --events --routines --no-data \ 
    schemaname 
+2

Bu ayrıca herhangi bir otomatik artış alanları, 'bırak tablo', karakter kümeleri vb. – Deanna

32

ifade:

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

Bu gönderiye teşekkürler, sorumu yanıtlayabildim:

Sürüm denetimimi db adresimde nasıl yapabilirim?

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

Sonra benim repo ben git'e sonucu, db_structure.sql eklendi ve itmeden önce: ben crontab bu katma Sonra 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" 

:

Sonra ben sadece Bu komut dosyasını oluşturan prod olarak değiştiririm Her zaman yaptığım yapısal değişikliklerin olup olmadığını her zaman kontrol ederim.

İlgili konular