Estoy tratando de enumerar todas las tablas de la base de datos mysql en ubuntu os. Pero recibo este error todo el tiempo;
mysql> use mysql; Database changed mysql> show tables; ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not existHe comprobado mi versión de mysql:
mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)Entonces parece que es la última versión de mysql.
¿Cómo puedo solucionar este error?
Por favor ayuda
Este error ocurre cuando hay una vista/disparador en esa base de datos (mysql en su caso) que tiene un definidor (en otras palabras, un usuario) que es un definidor para la vista pero luego el usuario en sí no existe. Una nueva instalación de mysql debería tener ese usuario
mysql> select user,host from mysql.user where user='mysql.infoschema'; +------------------+-----------+ | user | host | +------------------+-----------+ | mysql.infoschema | localhost | +------------------+-----------+ 1 row in set (0.00 sec)Con los permisos:
mysql> show grants for 'mysql.infoschema'@'localhost'; +-------------------------------------------------------+ | Grants for mysql.infoschema@localhost | +-------------------------------------------------------+ | GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost` | +-------------------------------------------------------+ 1 row in set (0.00 sec)Por alguna razón, ese usuario falta / se elimina en su lista de usuarios y es por eso que cuando enumera las tablas, también verifica las vistas y se queja de su definidor faltante.
Solución:
Simplemente cree el usuario con los permisos anteriores y eso debería dejar de mostrar el error.
Crear usuario:
mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec)Otorgar permisos:
mysql> GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost`; Query OK, 0 rows affected, 1 warning (0.00 sec)mysql -u root -p mysql> SET GLOBAL innodb_fast_shutdown = 1; mysql_upgrade -u root -pDespués de muchos intentos, la solución es eliminar primero el usuario mysql.infoschema y luego seguir los pasos de vamshi :
Crear usuario :
mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password'; Query OK, 0 rows affected (0.00 sec) Grant permissions: mysql> GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost`; Query OK, 0 rows affected, 1 warning (0.00 sec) DROP USER 'mysql.infoschema'@'localhost';El resto de la solución es como las respuestas anteriores.
mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost`;Transferí mi tabla de usuarios de otro servidor mysql a una nueva instalación y me encontré con este error. Entonces, si no tiene el usuario mysql.infoschema , puede probar:
sudo systemctl stop mysql sudo mysqld --upgrade=FORCEEsto me lo arregló.