Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bisakah MySQL dengan andal memulihkan cadangan yang berisi tampilan atau tidak?

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:

  1. 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 )
  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instal MySQL dengan memungkinkan di ubuntu

  2. Bagaimana Menghindari Lock wait timeout melebihi pengecualian.?

  3. Bagaimana cara mengisyaratkan indeks untuk digunakan dalam kueri pemilihan MySQL?

  4. Menggunakan mysql concat() dalam klausa WHERE?

  5. MySQL - cara menampilkan topik terbaru per utas