Il comando mysqldump eseguirà anche il backup di tutte le viste presenti nel DB o esiste un comando speciale per esso?


10

Sto cercando di eseguire il backup del mio intero database insieme alle visualizzazioni. Ho intenzione di usare il mysqldumpcomando. Mi chiedevo se questo avrebbe copiato tutte le viste o avrei dovuto usare un comando separato per esso.

Per favore, suggeriscimi una risposta. Qualsiasi aiuto è molto apprezzato.

Risposte:


9

Non esiste un'opzione specifica per le viste di dumping.

Puoi provare quanto segue:

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

Dovresti essere in grado di vedere le viste. Ciò indica che quando si esegue il dump dei database, la vista viene fornita con esso.

Un'altra acrobazia che puoi provare, solo per ottenere le viste, è questa:

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

Provaci !!!


Grazie mille per una risposta così esplicativa. Il problema è che i miei database sono molto grandi, quindi ho intenzione di copiarne uno alla volta. In tutto questo casino ho anche bisogno di copiare 'viste', quindi non posso usare il comando --all-d Database. Si prega di suggerire un modo per copiare le viste dal Mysql DB Server.
Vinny,

Pertanto, anziché utilizzare --all-databases, specificare il database desiderato.
Derek Downey,

1

La risposta migliore per questo è probabilmente questa di Olliiiver che ho leggermente modificato. Esporta in modo specifico una query della tabella di rilascio e una query di visualizzazione della vista di creazione o sostituzione per ogni vista nel sistema, senza la necessità di confondere con alcuna tabella. La query della tabella di destinazione è spesso importante, poiché a mysqldump piace apparentemente ricreare le viste come tabelle a meno che non includa tutte le viste nel proprio parametro --ignore-table, il che sarebbe fastidioso. Utilizza 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"

Se vuoi trasformare qualcosa del genere in uno script di shell, ti consiglio anche di utilizzare il parametro --defaults-extra-file = CREDSFILENAME, in modo che non sia necessario specificare user / pass nello script.

Il file delle credenziali è simile al seguente:

[client]
username=YourUsernameHere
password=YourPasswordHere
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.