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.

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 !!!


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.