To pytanie jest trochę stare, ale właśnie zmarnowałem kilka godzin, próbując rozwiązać dokładnie ten sam problem, więc myślę, że jasne wyjaśnienie może się komuś przydać w przyszłości...
Aby przejść do sedna:Problem tkwi w polu DEFINIER w twoim zrzucie mysql. Wygląda mniej więcej tak:
/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */
Problem polega na tym, że *[email protected] * zawsze będzie zakodowane na stałe do konta użytkownika, które zostało użyte do utworzenia widoku w oryginalnej bazie danych i NIE użytkownika, którego użyłeś do wyeksportowania lub zaimportowania bazy danych zgodnie z oczekiwaniami (a przynajmniej tak zrobiłem). A później, podczas importu, ten użytkownik zostanie użyty do ponownego utworzenia widoku.
Możesz więc eksportować/importować jako root, ale jeśli oryginalna baza danych działa pod innym użytkownikiem i nie ma uprawnień CREATE VIEW w nowej bazie danych, import się nie powiedzie.
Masz dwa proste rozwiązania:
- Wyszukaj i zamień wszystkie odniesienia do
some_user
@localhost
w pliku zrzutu z nowym użytkownikiem (tym, którego używasz do importowania zrzutu, np. example@ sqldat.com ) - Lub możesz przyznać *some_user* odpowiednie uprawnienia do nowej bazy danych, aby widoki mogły być tworzone na jego koncie
Każdy sposób rozwiąże problem, ale myślę, że pierwsze podejście jest o wiele lepsze i czystsze, ponieważ nie musisz się martwić o wielu użytkowników w przyszłości.