Czy polecenie mysqldump utworzy również kopię zapasową wszystkich widoków obecnych w DB, czy istnieje specjalne polecenie?

10

Próbuję wykonać kopię zapasową całej bazy danych wraz z widokami. Mam zamiar użyć mysqldumppolecenia. Zastanawiałem się, czy to skopiuje wszystkie widoki, czy będę musiał użyć do tego osobnego polecenia.

Proszę zasugerować mi odpowiedź. Każda pomoc jest mile widziana.

Vinny
źródło

Odpowiedzi:

9

Nie ma konkretnej opcji odrzucania widoków.

Możesz spróbować:

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

Powinieneś być w stanie zobaczyć widoki. Oznacza to, że gdy zrzucisz bazy danych, widok jest z nim związany.

Kolejny wyczyn, którego możesz spróbować, aby uzyskać tylko widoki, to:

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

Spróbuj !!!

RolandoMySQLDBA
źródło
Wielkie dzięki za tak wyjaśniającą odpowiedź. Problem polega na tym, że moje bazy danych są bardzo duże, więc planuję skopiować je pojedynczo. W całym tym bałaganie muszę również skopiować „widoki”, więc nie mogę użyć polecenia --all-databases. Proszę zasugerować sposób na spójne kopiowanie widoków z Mysql DB Server.
vinny,
Zamiast używać --all-databases, określ bazę danych, którą chcesz.
Derek Downey,
1

Najlepszą odpowiedzią na to pytanie jest prawdopodobnie ta autorstwa olliiiver, którą nieco zmodyfikowałem. W szczególności eksportuje zapytanie o tablicę upuszczania oraz zapytanie o utworzenie lub zamianę widoku dla każdego widoku w systemie, bez potrzeby manipulowania żadnymi tabelami. Zapytanie o tablicę zrzutu jest często ważne, ponieważ mysqldump najwyraźniej lubi odtwarzać widoki jako tabele, chyba że umieścisz każdy widok we własnym parametrze --ignore-table, co byłoby denerwujące. Wykorzystuje INFORMACJE_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"

Jeśli chcesz zamienić coś takiego w skrypt powłoki, polecam również użycie parametru --defaults-extra-file = CREDSFILENAME, abyś nie musiał określać użytkownika / hasła w skrypcie.

Plik poświadczeń wygląda następująco:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
źródło