【问题标题】:Table 'mysql.user' doesn't exist:ERROR表 'mysql.user' 不存在:错误
【发布时间】:2018-10-06 03:24:43
【问题描述】:

我在 mysql 中为 java 程序创建一个数据库。我的程序在我的朋友系统中运行良好。但是我的 mysql 有一些问题。

查询如下:

mysql> create database sampledb;

Query OK, 1 row affected (0.00 sec)

mysql> use sampledb;

Database changed

mysql> create user zebronics identified by 'zebra123';

ERROR 1146 (42S02): Table 'mysql.user' doesn't exist

我无法为我的数据库创建任何用户。请帮忙??

【问题讨论】:

  • 你可以先看看这个链接:dev.mysql.com/doc/refman/5.1/en/create-table.html
  • 就我而言,一切都完好无损(表 mysql 没有被损坏丢弃)我正在尝试来自 SELECT * FROM mysql.user >命令行,而 MySQL-Workbench 正在运行,Users and Privilege 部分打开(基本上 mysql.user 表已被MySQL-Workbench锁定)。关闭工作台解决了这个问题。我观察到反之亦然:如果我从shellroot 登录,然后尝试导航到Workbench 上的Users and Privilege 部分,它将失败。

标签: mysql


【解决方案1】:

我的解决方案是运行

mysql_upgrade -u root

场景:我在我的 Mac 上使用“自制升级”更新了 MySQL 版本。之后,有些东西起作用了,但其他命令引发了问题中描述的错误。

【讨论】:

  • 我在尝试使用mysql_secure_installation 保护mysql 并收到一条消息Table 'mysql.role_edges' doesn't exist 时实际上遇到了同样的问题
  • 我是自制用户,在安装 mysql 8.0.12 时似乎需要运行 mysql_upgrade。我之前运行的是 mysql 8.0.11,虽然我试图完全删除 8.0.11 的任何残余,但我想有一些东西挥之不去?否则我怀疑 8.0.12 可能需要 mysql_upgrade 出于我目前无法理解的不同原因。
  • 这正是我从旧版本恢复数据库转储后所需要的。谢谢!
【解决方案2】:

您的 MySQL 安装似乎有些问题。 mysql.user 表肯定存在。尝试在您的服务器上运行以下命令,在名为 mysql 的数据库中创建表:

mysql_install_db

如果这不起作用,可能是您的 MySQL 数据目录的权限被弄乱了。查看“已知良好”的安装作为权限应该是什么的参考。

您也可以尝试完全重新安装 MySQL。

【讨论】:

  • 如果您遇到此问题,请确保使用正确的数据库 (mysql)。
【解决方案3】:

这里的问题与 lxxxvi 描述的相同。运行

    mysql_upgrade -u root

然后允许我成功输入密码

    mysql_secure_installation

正在等待。

【讨论】:

  • 用最后一个版本的mysql,报错:The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server. To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically. Restart is not required after upgrade. The upgrade process automatically starts on running a new MySQL binary with an older data directory. To avoid accidental upgrades, please use the --upgrade=NONE option with the MySQL binary. The option --upgrade=FORCE is also provided to run the server upgrade .......
【解决方案4】:

您的数据库可能已损坏。尝试检查mysql.user是否存在:

use mysql;
select * from user;

如果缺少这些,您可以尝试使用重新创建表

mysql_install_db

或者您可能需要清理(完全删除它)并重新安装 MySQL。

【讨论】:

  • 这么多年问题依然存在。我有同样的问题,在我的情况下,select * from user 确实给了你用户,但mysql.user 实际上是一个视图。我不知道那怎么可能。 table_type:View, Engine: null, version: null... 这个视图是从 global_priv 表创建的。
  • @temo 这是 MariaDB 10.4 中的新功能。
  • @JanusBahsJacquet 对我来说是密码不匹配。转移数据库服务器后使用了错误的密码,它给出了这个确切的错误。修复后一切正常。
  • @temo 我的意思是mysql.user 是一个视图而不是一个表是 MariaDB 10.4 中的一个新事物,与以前的版本相比有所不同。 :-)
  • @JanusBahsJacquet 我从不否认这一点。我认为改变是问题,但事实并非如此。
【解决方案5】:
 show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| datapass_schema    |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.05 sec)

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables
    -> ;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
23 rows in set (0.00 sec)

mysql> create user m identified by 'm';
Query OK, 0 rows affected (0.02 sec)

如上所示检查数据库 mysql 和表用户,如果该剂量有效,则说明您的 mysql 安装不正确。

使用其他帖子中提到的以下命令再次安装表

mysql_install_db

【讨论】:

  • mysql_install_db 已弃用。请考虑切换到mysqld --initialize
【解决方案6】:

您可以运行以下查询来检查用户表是否存在。

SELECT * FROM information_schema.TABLES
WHERE TABLE_NAME LIKE '%user%'

看看你是否能在

中找到具有以下值的行
mysql   user    BASE TABLE  MyISAM  

如果找不到该表,请查看以下链接以重建数据库How to recover/recreate mysql's default 'mysql' database

【讨论】:

    【解决方案7】:

    尝试运行mysqladmin reload,在mac上位于/usr/loca/mysql/bin/

    【讨论】:

      【解决方案8】:
      'Error Code: 1046'. 
      

      此错误表明该表不存在有时可能是由于选择了不同的数据库并运行引用另一个表的查询。结果表明 '未选择数据库 通过在侧边栏的 SCHEMAS 列表中双击其名称来选择要使用的默认数据库'。 将解决这个问题,它对我很有用。

      【讨论】:

        猜你喜欢
        • 2020-04-13
        • 2017-03-13
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        • 2017-10-21
        • 1970-01-01
        • 2012-07-20
        相关资源
        最近更新 更多