Isso geralmente ocorre ao exportar exibições/gatilhos/procedimentos de um banco de dados ou servidor para outro, pois o usuário que criou esse objeto não existe mais.
Você tem duas opções:
1. Altere o DEFINER
Isso é possivelmente mais fácil de fazer ao importar inicialmente seus objetos de banco de dados, removendo qualquer
DEFINER
declarações do lixão. Alterar o definidor mais tarde é um pouco mais complicado:
Como alterar o definidor de visualizações
-
Execute este SQL para gerar as instruções ALTER necessárias
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Copie e execute as instruções ALTER
Como alterar o definidor para procedimentos armazenados
Exemplo:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Tenha cuidado, pois isso alterará todos os definidores de todos os bancos de dados.
2. Crie o usuário ausente
Se você encontrou o seguinte erro ao usar o banco de dados MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Então você pode resolvê-lo usando o seguinte:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
De http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definir-root.html
Isso funcionou como um encanto - você só precisa alterar
someuser
para o nome do usuário ausente. Em um servidor de desenvolvimento local, normalmente você pode usar apenas root
. Considere também se você realmente precisa conceder ao usuário
ALL
permissões ou se eles poderiam fazer com menos.