Como posso fazer backup de uma estrutura de tabela, mas NÃO de seus dados no MySQL

20

Estou usando o MySQL Administrator para fazer o backup do meu banco de dados. Posso fazer backup perfeito de todo o banco de dados com todas as suas tabelas. Existem algumas tabelas cujo tamanho é muito grande, então eu me pergunto se eu poderia apenas fazer backup da estrutura das tabelas (apenas seus elementos), mas não seus dados.

Andrew Schulman
fonte

Respostas:

40

Use o --no-dataswitch com o mysqldump para dizer para não despejar os dados, apenas a estrutura da tabela.

Isso produzirá a instrução CREATE TABLE para as tabelas.

Algo assim

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

Para direcionar tabelas específicas, insira-as após o nome do banco de dados.

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

LukeR
fonte
O +1 parece estar certo.
22620 David Pashley
Muito obrigado LukeR. Eu poderia lidar com isso. No momento em que escrevi, eu nem sabia nada sobre o mysqldump, mas consegui resolver o problema com a opção --no-data. Então eu também encontrei no MySQL Administrator o "CREATE SCRIPT" dessa tabela para que eu pudesse resolver esse problema com essa alternativa também.
3

como LukeR disse, a opção --no-data no mysqldump fará o que você deseja.

para adicionar a isso, aqui está um script de backup que escrevi que despeja todos os bancos de dados mysql em arquivos de texto sem formatação e cria arquivos despejos separados para o esquema e os dados de cada banco de dados (é bastante comum querer restaurar ou criar as tabelas em outro servidor mysql SEM os dados, e isso é muito mais fácil quando você já possui um arquivo pequeno apenas com os comandos CREATE TABLE / CREATE INDEX etc)

#! / bin / bash

# backup-mysql.sh
#
# Craig Sanders <[email protected]>
# este script é de domínio público. Faz o que quiseres com isso.

MYUSER = "USERNAME"
MYPWD = "SENHA"

ARGS = "- transação única - registros de descarga - inserção completa"

DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'mostra bancos de dados;' | egrep -v 'information_schema');


BACKUPDIR = / var / backups / mysql

ANO = $ (data + "% Y")
MÊS = $ (data + "% m")
DIA = $ (data + "% d")

DATA = "$ ANO- $ MÊS / $ ANO- $ MÊS- $ DIA"

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

para i em $ DATABASES; Faz
  echo -n "fazendo backup de $ i: esquema ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

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

  echo -n "compactando ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  eco "feito".
feito

# excluir arquivos de backup com mais de 30 dias
OLD = $ (encontre $ BACKUPDIR -tipo d -mtime +30)
if [-n "$ OLD"]; então
        eco excluindo arquivos de backup antigos: $ OLD
        eco $ OLD | xargs rm -rfv
fi
cas
fonte
Muito obrigado Craig pela sua resposta! Acabei de pegar a resposta LukeR como era a primeira. Obrigado pelo script, é uma boa referência.
Posso sugerir a adição --routinesao script do esquema?
24419 Jonathan
0

Você também pode fazer isso manualmente através da mysqlinterface da linha de comandos fazendo DESCRIBE <tablename>e copiando / colando os resultados.

Warren
fonte
O DESCRIBE não fornecerá algo que você pode copiar e colar. MOSTRAR CREATE TABLE.
David Pashley
não é um despejo do que a instrução CREATE seria necessário, mas faz tipos de colunas espetáculos e relações
Warren