Tengo problemas para hacer una copia de seguridad de mis bases de datos después de una actualización. He estado hurgando en mi sistema tratando de descubrir por qué. Una consulta que ejecuté devolvió este resultado.
Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES
Después de investigar un poco, parece que el definidor de estas vistas es una antigua cuenta de desarrollador que se ha purgado del sistema. Las bases de datos y las vistas con este problema se usan con poca frecuencia, y la mayoría se mantienen con fines de archivo.
Hay alrededor de 40 vistas con un definidor que ya no existe. ¿Hay una manera fácil de cambiar el definidor a una cuenta diferente en todo a la vez? ¿Hay alguna manera de hacer que mysqldump simplemente descargue todas las vistas en un archivo para poder editar ese archivo y recrear las vistas?
Respuestas:
Cree un archivo de texto con todas las definiciones de vista:
Edita AllMyViews.sql desde allí. Luego, suelte las vistas
Después de editar AllMyViews.sql, vuelva a cargarlos
Darle una oportunidad !!!
fuente
The user specified as a definer ('abc'@'1.2.3.4') does not exist
CREATE USER 'abc'@'1.2.3.4';
. Vuelva a intentarlo.Puede usar ALTER VIEW junto con el esquema de información . Usted mencionó descargarlo en un archivo de texto, así que quizás algo como esto:
Mezcle esto con la línea de comando mysql (suponiendo * nix, no familiarizado con windows):
Nota al margen: no puede modificar las entradas de información_esquema directamente . Nota 2: Esto funciona solo para una base de datos a la vez, si deja WHERE table_schema necesita insertar comandos USE entre cada uno.
fuente
SELECT table_name,view_definition FROM information_schema.views WHERE table_schema='cittmp';
vuelve| Staff | |
echo "SELECT CONCAT("ALTER DEFINER=\`youruser\`@\`host\` VIEW...
Automatizando la solución de Derek, esto cambiará DEFINER
root@localhost
y se configuraráSQL SECURITY INVOKER
(¡asegúrese de que lo desee primero!) En todas las vistas en todas las bases de datos:ADVERTENCIA: asegúrese de haber realizado una copia de seguridad completa de mysql (por ejemplo, deteniendo mysqld y haciendo una copia de seguridad de todos los archivos en / var / lib / mysql) antes de ejecutarlo, por si acaso ... Funcionó para mí, pero YMMV .
También debe verificar todas sus tablas / vistas con:
ya no debería quejarse de definidores inválidos en las vistas.
fuente
Exporte todas las vistas de la base de datos
<DB>
:o:
Edite
views.sql
(cambie el definidor) y vuelva a crearlos:Especifique
-u
y-p
cambie si es necesario.fuente
views.sql
editarse las VIEWS ? Además, ¿cómo recrearlos?DEFINER = olduser@oldhost
aDEFINER = newuser@newhost
,cat views.sql | mysql <DB>
recrea las vistas.