Чи буде резервна копія mysqldump резервного копіювання всіх поглядів, які є в БД, або є спеціальна команда для цього?


10

Я намагаюся створити резервну копію всієї бази даних разом із переглядами. Я збираюся використовувати mysqldumpкоманду. Мені було цікаво, чи це скопіює всі перегляди чи мені доведеться використовувати для цього окрему команду.

Будь ласка, запропонуйте мені відповідь. Будь-яка допомога дуже вдячна.

Відповіді:


9

Немає конкретних варіантів для демпінгу поглядів.

Ви можете спробувати наступне:

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

Ви повинні мати можливість бачити перегляди. Це вказує на те, що коли ви скидаєте бази даних, подання переходить разом із нею.

Ще один трюк, який ви можете спробувати, щоб отримати лише перегляди, це:

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

Спробувати !!!


Велике спасибі за таку пояснювальну відповідь. Проблема в тому, що мої бази даних дуже великі, тому я планую копіювати по черзі. У всьому цьому безладі мені також потрібно скопіювати 'view', щоб я не могла використовувати команду --all-databases. Пропонуйте запропонувати спосіб копіювати перегляди з Mysql DB Server.
Вінни

Тож замість використання --all-databasesвкажіть потрібну базу даних.
Дерек Дауні

1

Найкращою відповіддю на це, ймовірно , це один з olliiiver , який я злегка модифікували. Він спеціально експортує запит на випадок таблиці та створює або замінює запит перегляду для кожного перегляду в системі, не потребуючи возитися з будь-якими таблицями. Запит в таблиці, що випадає, часто важливий, оскільки, по всій видимості, mysqldump любить відтворювати представлення у вигляді таблиць, якщо ви не включите кожен вид у свій власний параметр --ignore-table, який би дратував. Він використовує INFORMATION_SCHEMA.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

Якщо ви хочете перетворити щось подібне на сценарій оболонки, я також рекомендую використовувати параметр --defaults-extra-file = CREDSFILENAME, так що вам не потрібно вказувати користувача / проходу в скрипті.

Файл облікових даних виглядає приблизно так:

[client]
username=YourUsernameHere
password=YourPasswordHere
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.