Analitycs

среда, 18 января 2012 г.

mysqldump: Got error: 1449: The user specified as a definer ('user'@'x.x.x.x') does not exist when using LOCK TABLES

Диагноз

При попытке сдампить базу MySQL получаем ошибку

mysqldump: Got error: 1449: The user specified as a definer ('user'@'x.x.x.x') does not exist when using LOCK TABLES

Причина - отсутсвует пользователь который прописан в хранимых процедурах/триггерах.

Похоже, что эта ошибка возникает, когда исходный/изначальный дамп MYSQL импортируется в сервер с ключем "force" (-f - который игнорирует ошибки), а потом его пытаются сохранить с этой машины.

Лечение

Вариант 1

Правим хранимую процедуру и дампим заново

use mysql;
select * from proc;

Вариант 2

1. Создаем пользователя

GRANT ALL PRIVILEGES ON *.* TO 'misseduser@*' IDENTIFIED BY 'some_pass' WITH GRANT OPTION

2. Дампим базу

3. Правим в дампе куски с отсутсвующими пользователями на CURRENT_USER Ищем что-то типа

/*!50013 DEFINER=`missed user`@`some_host` SQL SECURITY DEFINER */

и

DEFINER=`some_user`@`some_host`

заменяется на

DEFINER=CURRENT_USER

По мотивам этой заметки.
В этом гаджете обнаружена ошибка