Mysql
 sql >> база данни >  >> RDS >> Mysql

Може ли MySQL надеждно да възстанови резервни копия, които съдържат изгледи или не?

Този въпрос е малко стар, но току-що загубих няколко часа, опитвайки се да разреша абсолютно същия проблем, така че предполагам, че ясно обяснение може да се окаже полезно на някой в ​​бъдеще...

За да прекъснем нещата:Проблемът е в полето DEFINER във вашия mysql dump. Изглежда нещо като:

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

Проблемът е, че този *[email protected] * винаги ще бъде твърдо кодиран към потребителския акаунт, който е бил използван за създаване на изгледа в оригиналната DB и НЕ потребителят, който сте използвали за експортиране или импортиране на базата данни, както може да се очаква (или поне аз го направих). И по-късно, по време на импортирането, този потребител ще бъде използван за повторно създаване на изгледа.

Така че можете да експортирате/импортирате като root, но ако оригиналната DB се изпълнява под друг потребител и няма права за CREATE VIEW в новата база данни, импортирането ще бъде неуспешно.

Имате две прости решения:

  1. Търсете и заменете всички препратки към some_user @localhost във вашия дъмп файл с вашия нов потребител (този, който използвате за импортиране на дъмпа, напр. ex sqldat.com )
  2. Или можете да предоставите на *some_user* подходящи права върху новата база данни, така че да могат да се създават изгледи под неговия акаунт

Всеки начин ще реши проблема, но мисля, че първият подход е много по-добър и по-чист, тъй като не е нужно да се притеснявате за множество потребители в бъдеще.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Архивиране на логически бази данни с помощта на MySQL Shell

  2. Относно опресняването на обекти в sqlalchemy сесия

  3. MySQL Подобно на множество стойности

  4. Заредете CSV данни в MySQL в Python

  5. Потребителски разрешения на MySQL