Назад | Перейти на главную страницу

Как я могу создать резервную копию структуры таблицы, но НЕ ее данных в MySQL

Я использую MySQL Administrator для создания резервной копии базы данных. Я могу создать резервную копию всей базы данных со всеми ее таблицами. Есть несколько таблиц, размер которых очень велик, поэтому мне интересно, могу ли я создать резервную копию только структуры таблиц (только их элементов), но не их данных.

Использовать --no-data переключитесь с mysqldump, чтобы он не сбрасывал данные, а только структуру таблицы.

Это выведет оператор CREATE TABLE для таблиц.

Что-то вроде этого

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

Чтобы указать конкретные таблицы, введите их после имени базы данных.

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, параметр --no-data для mysqldump сделает то, что вы хотите.

чтобы добавить к этому, вот сценарий резервного копирования, который я написал, который выгружает все базы данных mysql в простые текстовые файлы и создает отдельные файлы дампа для каждой схемы таблицы и данных базы данных (довольно часто возникает необходимость восстановить или создать таблицы на другом сервере mysql БЕЗ данные, и это намного проще сделать, когда у вас уже есть небольшой файл с командами CREATE TABLE / CREATE INDEX и т. д.)

#! /bin/bash

# backup-mysql.sh
#
# Craig Sanders <cas@taz.net.au>
# 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

Вы также можете сделать это вручную через mysql интерфейс командной строки, выполнив DESCRIBE <tablename> и скопируйте / вставьте результаты.