La commande mysqldump sauvegardera-t-elle également toutes les vues présentes dans la base de données ou existe-t-elle une commande spéciale?

10

J'essaie de sauvegarder toute ma base de données avec les vues. Je vais utiliser la mysqldumpcommande. Je me demandais si cela copiera toutes les vues ou si je devrai utiliser une commande distincte pour cela.

Veuillez me suggérer une réponse. Toute aide est grandement appréciée.

vinny
la source

Réponses:

9

Il n'y a pas d'option spécifique pour vider les vues.

Vous pouvez essayer ce qui suit:

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

Vous devriez pouvoir voir les vues. Cela indique que lorsque vous sauvegardez des bases de données, la vue est fournie avec.

Un autre coup que vous pouvez essayer, juste pour obtenir les vues uniquement, est le suivant:

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

Essaie !!!

RolandoMySQLDBA
la source
Merci beaucoup pour cette réponse explicative. Le problème est que mes bases de données sont très grandes, donc je prévois d'en copier une à la fois. Dans tout ce bordel, je dois également copier des «vues», donc je ne peux pas utiliser la commande --all-databases. Veuillez suggérer un moyen de copier les vues à partir du serveur Mysql DB.
vinny
Donc, au lieu d'utiliser --all-databases, spécifiez la base de données souhaitée.
Derek Downey
1

La meilleure réponse à cela est probablement celle d' olliiiver que j'ai légèrement modifiée. Il exporte spécifiquement une requête de table de dépôt et une requête de création ou de remplacement de vue pour chaque vue du système, sans avoir à jouer avec les tables. La requête de suppression de table est souvent importante, car mysqldump aime apparemment recréer des vues sous forme de tables, sauf si vous incluez chaque vue dans son propre paramètre --ignore-table, ce qui serait ennuyeux. Il utilise 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"

Si vous voulez transformer quelque chose comme ça en script shell, je recommande également d'utiliser le paramètre --defaults-extra-file = CREDSFILENAME, afin que vous n'ayez pas besoin de spécifier user / pass dans le script.

Le fichier d'informations d'identification ressemble à ceci:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
la source