Будет ли команда mysqldump создавать резервные копии всех представлений, представленных в БД, или для этого есть специальная команда?

10

Я пытаюсь сделать резервную копию всей моей базы данных вместе с представлениями. Я собираюсь использовать mysqldumpкоманду. Мне было интересно, если это скопирует все виды или мне придется использовать отдельную команду для этого.

Пожалуйста, предложите мне ответ. Любая помощь очень ценится.

Vinny
источник

Ответы:

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

Попробуйте!

RolandoMySQLDBA
источник
Большое спасибо за такой пояснительный ответ. Проблема в том, что мои базы данных очень большие, поэтому я планирую копировать по одной за раз. Во всем этом беспорядке мне также нужно скопировать 'views', чтобы я не мог использовать команду --all-database. Пожалуйста, предложите способ последовательного копирования представлений с 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, чтобы вам не приходилось указывать user / pass в сценарии.

Файл учетных данных выглядит следующим образом:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
источник