Това обикновено се случва при експортиране на изгледи/задействания/процедури от една база данни или сървър на друг, тъй като потребителят, създал този обект, вече не съществува.
Имате две опции:
1. Променете DEFINER
Това вероятно е най-лесно да направите, когато първоначално импортирате обектите на базата данни, като премахнете всеки DEFINER
извлечения от сметището.
Промяната на дефинера по-късно е малко по-трудна:
Как да промените дефинера за изгледи
-
Изпълнете този SQL, за да генерирате необходимите ALTER изрази
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Копирайте и изпълнете операторите ALTER
Как да промените дефинера за съхранени процедури
Пример:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Бъдете внимателни, защото това ще промени всички дефинери за всички бази данни.
2. Създайте липсващия потребител
Ако сте открили следната грешка, докато използвате MySQL база данни:
The user specified as a definer ('someuser'@'%') does not exist`
След това можете да го решите, като използвате следното:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
От http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Това работи като чар - трябва само да промените someuser
на името на липсващия потребител. На локален сървър за разработчици обикновено може да използвате просто root
.
Също така помислете дали наистина трябва да предоставите на потребителя ALL
разрешения или дали биха могли да направят с по-малко.