Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL peut-il restaurer de manière fiable des sauvegardes contenant des vues ou non ?

Cette question est un peu ancienne, mais je viens de perdre quelques heures à essayer de résoudre exactement le même problème, donc je suppose qu'une explication claire pourrait être utile à quelqu'un à l'avenir...

Pour aller droit au but :le problème se situe dans le champ DEFINER de votre vidage mysql. Cela ressemble à :

/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */

Le problème est que ce *[email protected] * sera toujours codé en dur sur le compte utilisateur qui a été utilisé pour créer la vue dans la base de données d'origine et PAS l'utilisateur que vous avez utilisé pour exporter ou importer la base de données comme on pouvait s'y attendre (ou du moins je l'ai fait). Et plus tard, lors de l'importation, cet utilisateur sera utilisé pour recréer la vue.

Vous pouvez donc exporter/importer en tant que root, mais si la base de données d'origine s'exécute sous un autre utilisateur et qu'elle n'a pas les droits CREATE VIEW dans la nouvelle base de données, l'importation échouera.

Vous avez deux solutions simples :

  1. Rechercher et remplacer toutes les références à some_user @localhost dans votre fichier de vidage avec votre nouvel utilisateur (celui que vous utilisez pour importer le vidage, par exemple example@ sqldat.com )
  2. Ou vous pouvez accorder à *some_user* les droits appropriés sur la nouvelle base de données afin que des vues puissent être créées sous son compte

Quoi qu'il en soit, le problème sera résolu, mais je pense que la première approche est bien meilleure et plus propre, car vous n'avez pas à vous soucier de plusieurs utilisateurs à l'avenir.