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

20

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

Эндрю Шульман
источник

Ответы:

40

Используйте --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

Люкером
источник
+1 выглядит примерно так.
Дэвид Пашли
Большое спасибо LukeR. Я мог справиться с этим. На момент написания статьи я даже ничего не знал о mysqldump, но смог решить проблему с ключом --no-data. Затем я также нашел в MySQL Administrator «CREATE SCRIPT» этой таблицы, чтобы я мог решить эту проблему и с этой альтернативой.
3

как сказал LukeR, опция --no-data для mysqldump будет делать то, что вы хотите.

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

#! / Бен / Баш

# backup-mysql.sh
#
# Крейг Сандерс <cas@taz.net.au>
# этот скрипт находится в свободном доступе. делай что хочешь с этим.

MyUser = "USERNAME"
MYPWD = "ПАРОЛЬ"

ARGS = "- одиночная транзакция --flush-logs --complete-insert"

DATABASES = $ (mysql -D mysql --skip-column-names -B -e 'показать базы данных;' | egrep -v 'information_schema');


BACKUPDIR = / вар / резервное копирование / MySQL

ГОД = $ (дата + "% Y")
МЕСЯЦ = $ (дата + "% m")
ДЕНЬ = $ (дата + "% d")

ДАТА = "$ $ МЕСЯЦ ГОД-/ $ $ месяц- ГОД-$ DAY"

mkdir -p $ BACKUPDIR / $ DATE
CD $ BACKUPDIR / $ DATE

для меня в $ DATABASES; делать
  echo -n "резервное копирование $ i: схема ..."
  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 "Сжатие ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  эхо "сделано".
сделано

# удалить файлы резервных копий старше 30 дней
OLD = $ (найти $ BACKUPDIR -типа d -mtime +30)
if [-n "$ OLD"]; тогда
        повторить удаление старых файлов резервных копий: $ OLD
        echo $ OLD | xargs rm -rfv
фи
саз
источник
Большое спасибо Крейг за ваш ответ! Я просто беру ответ LukeR, как это было первым. Спасибо за сценарий, это хорошая ссылка.
Могу ли я предложить добавить --routinesв схему сценарий?
Джонатан
0

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

кроличий садок
источник
DESCRIBE не даст вам то, что вы можете скопировать и вставить. ПОКАЗАТЬ СОЗДАТЬ ТАБЛИЦУ будет.
Дэвид Пашли
это не свалка , что CREATE заявление необходимо будет, но это делает шоу типов столбцов и отношения
Warren