it-swarm.com.de

mysqldump - Exportiert nur die Struktur ohne Autoincrement

Ich habe eine MySQL-Datenbank und versuche, einen Weg zu finden, nur die Struktur ohne die Auto-Inkrement-Werte zu exportieren. mysqldump --no-data würde fast den Job erledigen, behält jedoch die auto_increment-Werte bei. Gibt es eine Möglichkeit, PHPMyAdmin zu verwenden (ich weiß, dass es das kann)?

68
Paris

Du kannst das : 

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

Wie bereits erwähnt, fügen Sie den Parameter sed (für g lobal replacement) wie folgt hinzu, wenn g ordnungsgemäß funktionieren soll: 

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

(Dies funktioniert nur, wenn GUI-Tools installiert sind: mysqldump --skip-auto-increment)

55
JoDev

Die Antwort von JoDev funktionierte perfekt mit einer kleinen Anpassung an den regulären Ausdruck von sed:

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

Standardmäßig sind --create-options in --opt enthalten, die die Tabellendefinitionen AUTO_INCREMENT generiert.

Wenn Sie nur die Basistabellen wollen,

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

Wenn Sie Ansichten, Trigger und Routinen möchten,

mysqldump -hlocalhost -uuser -ppass \
    --skip-opt --events --routines --no-data \
    schemaname
4
Ian Schoonover

Dank dieses Beitrags konnte ich meine Frage beantworten:

Wie kann ich die Versionskontrolle auf meiner Datenbank durchführen?

Dann habe ich gerade dieses Skript erstellt: 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"

Dann habe ich dies zu crontab hinzugefügt:

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

Dann fügte ich in meinem Repo das Ergebnis db_structure.sql zu git hinzu und bevor ich die Änderungen in prod drückte, überprüfe ich immer, ob es strukturelle Änderungen gibt, die ich bei allen Dbs vergessen habe.

2

Um einfach --add-drop-table so zu verwenden:

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

siehe mysql bugs und mysql dev

0
Yoshio Mori