Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann MySQL zuverlässig Backups wiederherstellen, die Views enthalten oder nicht?

Diese Frage ist ein bisschen alt, aber ich habe gerade ein paar Stunden damit verschwendet, genau das gleiche Problem zu lösen, also denke ich, dass eine klare Erklärung für jemanden in der Zukunft nützlich sein könnte ...

Um es auf den Punkt zu bringen:Das Problem liegt im Feld DEFINER in Ihrem mysql-Dump. Es sieht in etwa so aus:

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

Das Problem ist, dass dieses *[email protected] * wird immer fest auf das Benutzerkonto codiert, mit dem die Ansicht in der ursprünglichen Datenbank erstellt wurde, und NICHT der Benutzer, den Sie zum Exportieren oder Importieren der Datenbank verwendet haben, wie man es erwarten würde (oder zumindest habe ich es getan). Und später, während des Imports, wird dieser Benutzer verwendet, um die Ansicht neu zu erstellen.

Sie können also als root exportieren/importieren, aber wenn die ursprüngliche DB unter einem anderen Benutzer läuft und sie keine CREATE VIEW-Rechte in der neuen Datenbank hat, schlägt der Import fehl.

Sie haben zwei einfache Lösungen:

  1. Suche und ersetze alle Verweise auf some_user @localhost in Ihrer Dump-Datei mit Ihrem neuen Benutzer (derjenige, den Sie zum Importieren des Dumps verwenden, z. sqldat.com )
  2. Oder Sie können *irgendeinem_Benutzer* die entsprechenden Rechte für die neue Datenbank erteilen, damit Ansichten unter seinem Konto erstellt werden können

So oder so wird das Problem behoben, aber ich denke, der erste Ansatz ist viel besser und sauberer, da Sie sich in Zukunft nicht um mehrere Benutzer kümmern müssen.