Come posso eseguire il backup di una struttura di tabella ma NON dei suoi dati in MySQL


20

Sto usando MySQL Administrator per fare il backup del mio database. Posso eseguire perfettamente il backup dell'intero database con tutte le sue tabelle. Ci sono alcune tabelle le cui dimensioni sono molto grandi, quindi mi chiedo se potrei solo eseguire il backup della struttura delle tabelle (solo i loro elementi) ma non i loro dati.

Risposte:


40

Usa l' --no-datainterruttore con mysqldump per dirgli di non scaricare i dati, ma solo la struttura della tabella.

Ciò genererà l'istruzione CREATE TABLE per le tabelle.

Qualcosa come questo

mysqldump --no-data -h localhost -u root -ppassword mydatabase > mydatabase_backup.sql

Per targetizzare tabelle specifiche, inserirle dopo il nome del database.

mysqldump --no-data -h localhost -u root -ppassword mydatabase table1 table2 > mydatabase_backup.sql

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html


+1 sembra giusto.
David Pashley,

Grazie mille LukeR. Potrei farcela. Al momento in cui scrivevo non sapevo nemmeno nulla di mysqldump ma potevo risolvere il problema con l'opzione --no-data. Poi ho anche trovato in MySQL Administrator il "CREATE SCRIPT" di quella tabella in modo da poter risolvere questo problema anche con questa alternativa.

3

come ha detto LukeR, l'opzione --no-data per mysqldump farà quello che vuoi.

per aggiungere a questo, ecco uno script di backup che ho scritto che scarica tutti i database mysql in file di testo semplice e crea file di dump separati per lo schema e i dati di ciascuna tabella del database (è abbastanza comune voler ripristinare o creare le tabelle su un altro server mysql SENZA i dati, e questo è molto più facile da fare quando hai già un piccolo file con solo i comandi CREATE TABLE / CREATE INDEX ecc.)

#! / Bin / bash

# backup-mysql.sh
#
# Craig Sanders <cas@taz.net.au>
# questo script è di dominio pubblico. fai quello che vuoi con esso.

MYUSER = "username"
MyPwd = "passwd"

ARGS = "- singola transazione --flush-logs --complete-insert"

DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'show database;' | egrep -v 'information_schema');


BACKUPDIR = / var / backup / mysql

ANNO = $ (data + "% Y")
MESE = $ (data + "% m")
GIORNO = $ (data + "% d")

DATE = "$ Yearbook $ AL MESE / $ Yearbook $ mese- $ DAY"

mkdir -p $ BACKUPDIR / $ DATE
cd $ BACKUPDIR / $ DATE

per i in $ DATABASES; fare
  echo -n "backup di $ i: schema ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

  echo -n "data ..."
  mysqldump $ ARGS --skip-opt --no-create-db --no-create-info -u $ MYUSER -p $ MYPWD $ i> $ i.data.sql

  echo -n "compressione ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  echo "fatto".
fatto

# elimina i file di backup più vecchi di 30 giorni
OLD = $ (trova $ BACKUPDIR -tipo d -mtime +30)
if [-n "$ OLD"]; poi
        eco eliminando vecchi file di backup: $ OLD
        echo $ OLD | xargs rm -rfv
fi

Grazie mille Craig per la tua risposta! Prendo la risposta LukeR come prima. Grazie per la sceneggiatura, è un buon riferimento.

Posso suggerire di aggiungere --routinesallo script dello schema?
Jonathan,

0

Puoi anche farlo manualmente attraverso l' mysqlinterfaccia della riga di comando facendo un DESCRIBE <tablename>e copia / incolla i risultati.


DESCRIBE non ti darà qualcosa che puoi copiare e incollare. SHOW CREATE TABLE lo farà.
David Pashley,

non è una discarica di ciò CREATE avrebbe bisogno di essere, ma non tipi di colonna degli spettacoli e delle relazioni
Warren
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.