mysqldump – Export solo struttura senza autoincrement

Ho un database MySQL e sto cercando di trovare un modo per esportare la sua struttura solo, senza l’incremento automatico dei valori. mysqldump --no-data potrebbe quasi fare il lavoro, ma si mantiene auto_increment valori. C’è un modo per farlo senza l’utilizzo di PHPMyAdmin (che so che è possibile farlo)?

  • Sembra che con MySQL 5.5 (server), --no-data si omette auto_increment valori di default.
  • sei sicuro? Che non è il comportamento che mi esperienza
  • MySQL 5.7.*’s mysqldump non ommit il auto_increment quando si utilizza l’opzione –no-dati.
InformationsquelleAutor Paris | 2013-03-27

 

5 Replies
  1. 61

    Si può fare questo :

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

    Come detto da altri, Se si desidera sed per funzionare correttamente, aggiungere il g (per gglobale di sostituzione) parametro come questo :

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

    (questo funziona solo se si dispone di Strumenti di interfaccia grafica installata: mysqldump --skip-auto-increment)

    • L’ultimo che ha lavorato molto. Grazie.
    • Non credo --skip-auto-increment è un’opzione reale. Io non riesco a trovarlo nel documentazione. Nessuno dei due MySQL bug per questo problema menzione: 20786, 30957. Che versione di mysqldump ha questa opzione?
    • --skip-auto-increment è un’opzione aggiunta in MySQL GUI Tools se ricordo correttamente. (non sono sicuro ^^) Quindi, in realtà, non è davvero una soluzione! Ma il secondo comando inline è corretto, ho fondato it qui in cui l’argomento parlando di autoincrement problema, e fornire l’idea di sed filtro!
    • Si prega di “downvoters”… Posta un commento per spiegare il voto!
    • Sed opzione non sarebbe rimuovere tutti gli auto incrementi se si esporta di più tabelle, solo l’ultima. Inoltre, l’opzione –skip-incremento automatico non è un’opzione esistente. Come è nata questa risposta di ottenere un rating così alto?
    • hai bisogno di una g alla fine della sed comando: sed ‘s/…/…/g’ per sostituire tutte le occorrenze.
    • Questo comando non è corretto. –skip-incremento automatico non esiste. La regex non è corretto. Come p91paul notato g modificatore deve essere aggiunto per sostituire tutte le occorrenze. Utilizzare @JohnW soluzione, invece.
    • Non utilizzare più tabelle

  2. 47

    JoDev risposta ha funzionato perfettamente per me, con un piccolo aggiustamento per il sed espressione regolare:

    mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
    • Sì, io non sono sicuro di quello che \b in sed istruzione, ma come per @JohnW suggerimento di qui, la rimozione di tale interruttore fa il trucco per me….
  3. 4

    È –create-opzioni, che è incluso con –opt, per impostazione predefinita, il quale genera la AUTO_INCREMENT definizioni di tabella.

    Se si desidera solo le tabelle di base,

    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

    Se vuoi viste, trigger e le routine di troppo,

    mysqldump -hlocalhost -uuser -ppass \
        --skip-opt --events --routines --no-data \
        schemaname
    • Nota che questo è anche gocce alcun incremento automatico dei campi, drop tables, set di caratteri, etc.
  4. 2

    Grazie per questo post, sono stato in grado di rispondere alla mia domanda:

    Come posso fare il controllo di versione sul mio db?

    Poi ho creato questo 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"

    Poi ho aggiunto questo crontab:

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

    Quindi nel mio repo ho aggiunto il risultato, db_structure.sql di git e prima di spingere modifiche prod ho sempre controllare se ci sono eventuali modifiche strutturali che ho dimenticato di fare su tutti i db.

  5. -1

    mysqldump -u [UTENTE] -p [PASSWORD] -d –skip-opt –singola transazione [DB_SCHEMA] > [FILE.ESTENSIONE]

    • Questo sarà anche rimuovere il auto_increment bandiera sul campo è abilitato, non solo il valore auto_increment alla fine.
    • --skip-opt discusso qui e qui.

Lascia un commento