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

13

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

    
por Andrew Schulman 14.08.2009 / 22:35

3 respostas

35

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

Isto irá mostrar a instrução CREATE TABLE para as tabelas.

Algo parecido com isto

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

Para segmentar 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

link

link

    
por 14.08.2009 / 22:44
2

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

para adicionar a isso, aqui está um script de backup que salva todos os bancos de dados mysql em arquivos de texto simples e cria arquivos de despejo separados para cada esquema e dados da tabela do banco de dados (é muito comum querer restaurar ou criar as tabelas em outro mysql server SEM os dados, e isso é muito mais fácil de fazer quando você já tem um pequeno arquivo com apenas os comandos CREATE TABLE / CREATE INDEX etc)

#! /bin/bash

# backup-mysql.sh
#
# Craig Sanders <[email protected]>
# this script is in the public domain.  do whatever you want with it.

MYUSER="USERNAME"
MYPWD="PASSWD"

ARGS="--single-transaction --flush-logs --complete-insert"

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


BACKUPDIR=/var/backups/mysql

YEAR=$(date +"%Y")
MONTH=$(date +"%m")
DAY=$(date +"%d")

DATE="$YEAR-$MONTH/$YEAR-$MONTH-$DAY"

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

for i in $DATABASES ; do
  echo -n "backing up $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 "compressing..."
  gzip -9fq $i.schema.sql $i.data.sql
  echo "done."
done

# delete backup files older than 30 days
OLD=$(find $BACKUPDIR -type d -mtime +30)
if [ -n "$OLD" ] ; then
        echo deleting old backup files: $OLD
        echo $OLD | xargs rm -rfv
fi
    
por 15.08.2009 / 02:45
0

Você também pode fazer isso manualmente através da interface de linha de comando mysql , fazendo um DESCRIBE <tablename> e copiando / colando os resultados.

    
por 15.08.2009 / 01:54