Як я можу створити резервну копію структури таблиці, але НЕ її дані в 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/uk/mysqldump.html#option_mysqldump_no-data

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


+1 виглядає правильно.
Девід Пашлі

Велике спасибі LukeR. Я міг із цим впоратися. На момент написання я навіть нічого не знав про mysqldump, але я міг вирішити проблему за допомогою --no-data switch. Тоді я також знайшов у 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 = "PASSWD"

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

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


BACKUPDIR = / var / резервне копіювання / mysql

YEAR = $ (дата + "% Y")
MONTH = $ (дата + "% m")
DAY = $ (дата + "% d")

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

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

для i в $ DATABASES; робити
  echo -n "резервне копіювання $ i: схема ..."
  mysqldump $ ARGS --no-data -u $ MYUSER -p $ MYPWD $ i> $ i.schema.sql

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

  відлуння -n "стискання ..."
  gzip -9fq $ i.schema.sql $ i.data.sql
  відлуння "зроблено".
зроблено

# видалити файли резервного копіювання старше 30 днів
OLD = $ (знайти $ BACKUPDIR -типу d -mtime +30)
if [-n "$ OLD"]; потім
        ехо видалення старих резервних файлів: $ OLD
        ехо $ СТАРИЙ | xargs rm -rfv
фі

Дякую Крейгу за вашу відповідь! Я просто підбираю відповідь LukeR, як це було вперше. Дякую за сценарій, це хороша довідка.

Чи можу я запропонувати додати --routinesдо сценарію схему?
Джонатан

0

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


DESCRIBE не надасть вам щось, що можна скопіювати та вставити. ШОУ СТВОРИТИ ТАБЛИЦЮ буде.
Девід Пашлі

це не звалище , що CREATE заяву необхідно буде, але це робить шоу типів стовпців і відносини
Warren
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.