sql >> Database teknologi >  >> RDS >> Mysql

Kan MySQL pålideligt gendanne sikkerhedskopier, der indeholder visninger eller ej?

Dette spørgsmål er lidt gammelt, men jeg har lige spildt et par timer på at prøve at løse præcis det samme problem, så jeg gætter på, at en klar forklaring kunne være nyttig for nogen i fremtiden...

For at komme til benet:Problemet er i DEFINER-feltet i din mysql-dump. Det ligner noget som:

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

Problemet er, at denne *[email protected] * vil altid være hårdkodet til den brugerkonto, der blev brugt til at oprette visningen i den originale DB og IKKE den bruger, du har brugt til at eksportere eller importere databasen, som man kunne forvente (eller i det mindste jeg gjorde det). Og senere, under importen, vil denne bruger blive brugt til at genskabe visningen.

Så du kan eksportere/importere som root, men hvis den originale DB kører under en anden bruger, og den ikke har nogen CREATE VIEW-rettigheder i den nye database, vil importen mislykkes.

Du har to simple løsninger:

  1. Søg og erstat alle referencer til some_user @localhost i din dump-fil med din nye bruger (den du bruger til at importere dumpet, f.eks. eksempel@ sqldat.com )
  2. Eller du kan give *some_user* passende rettigheder til den nye database, så visninger kan oprettes under hans konto

Uanset hvad vil løse problemet, men jeg tror, ​​at den første tilgang er meget bedre og renere, da du ikke behøver at bekymre dig om flere brugere i fremtiden.



  1. MariaDB JSON_OBJECT() Forklaret

  2. MS-Access baseklasse og afledte objekter

  3. Sådan fungerer SQLite Nullif()

  4. Sådan nulstiller du MySQL Root Users Password