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ı
cevap
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
)
Sonuncusu harika çalıştı. Teşekkürler. – Paris
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
'--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
mysq ldump -u [USER] -p [PASSWORD] -d --skip-opt --single-transaction [DB_SCHEMA]> [FILE.ESTENSIONE]
Ayrıca, auto_increment bayrağını, yalnızca auto_increment değerini değil, etkin olduğu alanlarda da kaldırır. – Aquarion
'--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
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
Bu ayrıca herhangi bir otomatik artış alanları, 'bırak tablo', karakter kümeleri vb. – Deanna
ifade:
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
Bu gönderiye teşekkürler, sorumu yanıtlayabildim:
Sürüm denetimimi db adresimde nasıl yapabilirim?
Sonra benim repo ben git'e sonucu,30 5 * * * sh /home/scripts/db_bkp.sh
db_structure.sql
eklendi ve itmeden önce: ben crontab bu katma Sonradb_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.
MySQL 5.5 (server) ile görünüyor, '--no-data' otomatik olarak auto_increment değerlerini atlayacak. –
@JoeyAdams Emin misin? Bu benim davranışım değil – aland
@JoeyAdams MySQL 5.7. * 'S mysqldump --no-data kullanırken auto_increment ommit etmez. –