Câu hỏi này hơi cũ, nhưng tôi vừa lãng phí vài giờ để giải quyết cùng một vấn đề, vì vậy tôi đoán một lời giải thích rõ ràng có thể hữu ích cho ai đó trong tương lai ...
Để cắt theo đuổi:Vấn đề là ở trường DEFINER trong kết xuất mysql của bạn. Nó trông giống như sau:
/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */
Vấn đề là đây * [email protected] * sẽ luôn được mã hóa cứng cho tài khoản người dùng đã được sử dụng để tạo chế độ xem trong DB ban đầu và KHÔNG người dùng mà bạn đã sử dụng để xuất hoặc nhập cơ sở dữ liệu như mong đợi (hoặc ít nhất là tôi đã làm như vậy). Và sau đó, trong quá trình nhập, người dùng này sẽ được sử dụng để tạo lại chế độ xem.
Vì vậy, bạn có thể xuất / nhập dưới dạng root, nhưng nếu DB gốc đang chạy dưới quyền người dùng khác và nó không có quyền TẠO CHẾ ĐỘ XEM trong cơ sở dữ liệu mới, thì quá trình nhập sẽ không thành công.
Bạn có hai giải pháp đơn giản:
- Tìm kiếm và thay thế tất cả các tham chiếu đến
some_user
@localhost
trong tệp kết xuất của bạn với người dùng mới (người bạn sử dụng để nhập kết xuất, ví dụ: example @ sqldat.com ) - Hoặc bạn có thể cấp cho * some_user * các quyền thích hợp trên cơ sở dữ liệu mới để có thể tạo các chế độ xem trong tài khoản của anh ấy
Dù bằng cách nào cũng sẽ khắc phục được sự cố, nhưng tôi nghĩ cách tiếp cận đầu tiên là cách tốt hơn và rõ ràng hơn, vì bạn không phải lo lắng về nhiều người dùng trong tương lai.