Pertanyaan ini agak lama, tetapi saya baru saja membuang beberapa jam untuk mencoba memecahkan masalah yang sama persis, jadi saya kira penjelasan yang jelas dapat berguna bagi seseorang di masa depan...
Untuk memotong ke pengejaran:Masalahnya ada di bidang DEFINER di dump mysql Anda. Itu terlihat seperti:
/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */
Masalahnya adalah *[email protected] ini * akan selalu di-hardcode ke akun pengguna yang digunakan untuk membuat tampilan di DB asli dan TIDAK pengguna yang Anda gunakan untuk mengekspor atau mengimpor database seperti yang diharapkan (atau setidaknya saya melakukannya). Dan nanti, selama impor, pengguna ini akan digunakan untuk membuat ulang tampilan.
Jadi Anda dapat mengekspor/mengimpor sebagai root, tetapi jika DB asli berjalan di bawah pengguna lain dan tidak memiliki hak CREATE VIEW di database baru, impor akan gagal.
Anda memiliki dua solusi sederhana:
- Telusuri dan ganti semua referensi ke
some_user
@localhost
di file dump Anda dengan pengguna baru Anda (yang Anda gunakan untuk mengimpor dump, mis. contoh@ sqldat.com ) - Atau Anda dapat memberikan *some_user* hak yang sesuai pada database baru sehingga tampilan dapat dibuat di bawah akunnya
Cara mana pun akan menyelesaikan masalah, tetapi menurut saya pendekatan pertama jauh lebih baik dan lebih bersih, karena Anda tidak perlu khawatir tentang banyak pengguna di masa mendatang.