【问题标题】:ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist错误 1449 (HY000): 指定为定义者的用户 ('mysql.infoschema'@'localhost') 不存在
【发布时间】:2020-09-19 12:05:21
【问题描述】:

我正在尝试列出 ubuntu 操作系统上 mysql 数据库中的所有表。但我一直收到这个错误;

mysql> use mysql;
Database changed
mysql> show tables;
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

我已经检查了我的mysql版本:

mysql  Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)

看来这是mysql的最后一个版本了。

我该如何解决这个错误?

请帮忙

【问题讨论】:

标签: mysql ubuntu


【解决方案1】:

当该数据库(在您的情况下为 mysql)中有任何视图/触发器具有定义器(换句话说,用户)是视图的定义器但用户本身不存在时,就会发生此错误。全新安装的 mysql 应该有那个用户

mysql> select user,host from mysql.user where user='mysql.infoschema';
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
+------------------+-----------+
1 row in set (0.00 sec)

有权限:

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)

由于某种原因,用户在您的用户列表中丢失/删除,这就是为什么当您列出表时,它还会检查其中的视图并抱怨其缺少定义器。

解决方案:

只需创建具有上述权限的用户即可停止显示错误。

创建用户:

mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

授予权限:

mysql> GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

【讨论】:

  • 我试过了。像这样得到:mysql> 显示 'mysql.infoschema'@'localhost' 的授权;错误 1141 (42000): 没有为主机 'localhost' 上的用户 'mysql.infoschema' 定义这样的授权 mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password'; ERROR 1396 (HY000): Operation CREATE USER failed for 'mysql.infoschema'@'localhost' mysql> GRANT SELECT ON . TO mysql.infoschema@localhost; ERROR 1410 (42000): You are not allowed to create a user with GRANT mysql>
  • 您登录的用户是什么..?可能您没有权限。我将以拥有所有权限的 root 身份登录,我复制了您的问题以确保我建议的解决方案正常工作。您可以使用select user() 找到您登录的用户并使用show grants 授予您通常会收到该错误如果您尝试使用GRANT 创建用户并同时授予权限,因为Mysql 8. 尝试单独的命令,先创建用户,然后添加授权。
  • 有趣的@kodcu,你能显示命令的输出mysql> show grants\G;
  • mysqld --upgrade=FORCE 帮助
【解决方案2】:

【讨论】:

    【解决方案3】:

    经过多次尝试,解决方法是先删除用户mysql.infoschema,然后执行vamshi的步骤:

    创建用户

    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)
    

    【讨论】:

      【解决方案4】:
      1. Delete the problematic user
      DROP USER 'mysql.infoschema'@'localhost';
      
      

      解决方案的其余部分与之前的答案相同。

      1. 再次创建用户
      2. 授予它权限
      mysql> CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password';
      
      mysql> GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost`;
      

      【讨论】:

      • 也为我工作!授予选择被拒绝,并出现错误“错误 1410 (42000): You are not allowed to create an user with GRANT mysql”,以防我在现有的有问题的用户上尝试它。但是如果按照这个答案,删除它,创建一个新的,授予权限 - 一切正常。
      • 我要设置什么密码?
      • Hey @User 您可以在单引号内使用任何密码,与此用户相关的您自己的字符串密码。
      【解决方案5】:

      我将我的用户表从另一台 mysql 服务器转移到新安装并遇到此错误。所以,如果你没有mysql.infoschema这个用户,你可以试试:

      sudo systemctl stop mysql
      
      sudo mysqld --upgrade=FORCE
      

      这对我来说是固定的。

      【讨论】:

      • 这是正确的答案,IMO。
      • 痛苦的 4 小时后,我找到了一个有效的答案。在上述过程之后,我所要做的就是sudo systemctl start mysql
      猜你喜欢
      • 2016-11-16
      • 2022-01-14
      • 1970-01-01
      • 2017-02-16
      • 2012-04-27
      • 2021-06-28
      • 2020-08-23
      • 2018-10-04
      相关资源
      最近更新 更多