【问题标题】:How repair corrupt xampp 'mysql.user' table?如何修复损坏的 xampp 'mysql.user' 表?
【发布时间】:2019-11-29 10:02:32
【问题描述】:

我昨天使用 Xampp 创建了一些简单的基于 Web 的实用工具。 今天我想继续处理它,但是 xampp 控制面板给了我一些奇怪的错误。

这是 MySQL 错误日志:

2019-07-20 23:47:13 0 [Note] InnoDB: Uses event mutexes
2019-07-20 23:47:13 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-07-20 23:47:13 0 [Note] InnoDB: Number of pools: 1
2019-07-20 23:47:13 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-07-20 23:47:13 0 [Note] InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
2019-07-20 23:47:13 0 [Note] InnoDB: Completed initialization of buffer pool
2019-07-20 23:47:13 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=1819402
2019-07-20 23:47:14 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-07-20 23:47:14 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
2019-07-20 23:47:14 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-07-20 23:47:14 0 [Note] InnoDB: Setting file 'C:\xampp\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2019-07-20 23:47:14 0 [Note] InnoDB: File 'C:\xampp\mysql\data\ibtmp1' size is now 12 MB.
2019-07-20 23:47:14 0 [Note] InnoDB: Waiting for purge to start
2019-07-20 23:47:14 0 [Note] InnoDB: 10.3.16 started; log sequence number 1819411; transaction id 257
2019-07-20 23:47:14 0 [Note] InnoDB: Loading buffer pool(s) from C:\xampp\mysql\data\ib_buffer_pool
2019-07-20 23:47:14 0 [Note] InnoDB: Buffer pool(s) load completed at 190720 23:47:14
2019-07-20 23:47:14 0 [Note] Plugin 'FEEDBACK' is disabled.
2019-07-20 23:47:14 0 [Note] Server socket created on IP: '127.0.0.1'.

2019-07-20 23:47:14 0 [ERROR] mysqld.exe: Table '.\mysql\user' is marked as crashed and should be repaired

2019-07-20 23:47:14 0 [ERROR] mysqld.exe: Index for table '.\mysql\user' is corrupt; try to repair it

2019-07-20 23:47:14 0 [ERROR] Couldn't repair table: mysql.user

2019-07-20 23:47:14 0 [ERROR] Fatal error: Can't open and lock privilege tables: Index for table 'user' is corrupt; try to repair it

已经尝试修复,但是mySQL服务甚至无法启动,所以我有点无奈...

【问题讨论】:

  • 您可能必须至少删除 mysql.user 表并重新创建它以克服此错误。如果您不关心整个数据库,删除和初始化整个数据库可能会更快。
  • 好吧,这对整个事情来说有点新意,我什至可以在没有运行 SQL 服务器的情况下初始化数据库吗?
  • 你是 Windows 吗?如果是这样,您上次升级是什么时候?您是在添加用户,还是在失败时更改密码?

标签: mysql xampp


【解决方案1】:

这几乎可以肯定是mariaDB(即mySQL)中的一个已知错误。有关说明,请参阅ApacheFriends.org。用户 password 更改后会出现问题 - 通常是用户 root

一般建议似乎是减少损失并将 XAMPP 降级到 7.3.5

否则,即使在 完全卸载/重新安装 7.3.7 之后,问题也可能在以后再次出现。

以下是针对 Windows/XAMPP 用户的规避/修复。它假设您有备份 - 您可能会这样做。 (安装过程似乎提供了初始备份。)想法是让您重新开始直播,而无需降级足够长的时间以等待下一个版本到来。

走出沼泽的最快方法就是进入第 9 步。

(1) 查找“my.ini”(例如 c:\xampp\mysql\bin\my.ini )
(2) 在标签“[mysqld]”之后的新行中插入“skip-grant-tables”。 稍后删除。
(3) 现在可以从 XAMPP 控制面板启动 mySQL。
(4) 从浏览器启动 phpMyAdmin 并从数据库 'mysql' 中选择表 'user'
(5) 应该看到:#1034 表 'user' 的索引已损坏;尝试修复它。
(6) 从左侧面板中选择“mysql”,然后在右侧面板中选中“用户”。
(7) 从 'With selected' 下拉菜单中运行 'analyze' 然后 'repair table'。
(8) 如果 'Repair' 失败,只能选择 'DROP TABLE user' ....

(9) 通过复制以下 3 个文件,从分发备份中重新创建“用户”表。

C:\xampp\mysql\backup\mysql\user.frm 
C:\xampp\mysql\backup\mysql\user.MYD
C:\xampp\mysql\backup\mysql\user.MYI

C:\xampp\mysql\data\mysql\

然后重新启动 XAMPP 并根据需要添加/删除/编辑用户。

最后一点:'user' 和 'db' 表之间似乎存在某种关联。您可能需要按照步骤 (7) 修复“db”表。

【讨论】:

  • 工作就像一个魅力!在我的情况下 .\mysql\db' 已损坏,只需将 .\backup\mysql\db.MAI 文件复制到 .\data\mysql\db.MAI 即可为我修复它。 (尽管您可能还必须复制另外两个文件 db.frm 和 db.MAD,但在我的情况下不是必需的)
  • 这对我很有效。或者访问 [localhost/phpmyadmin/db_structure.php?db=mysql],然后单击 SQL 选项卡并运行不带方括号的查询 [REPAIR TABLE user]
【解决方案2】:

使用下面的命令,你会像现在一样快乐。

repair table DATABASENAME.TABLENAME use_frm;

我相信你知道在运行这个命令之前你应该用你的存储偏好和备份来改变大写,不是吗? :)

资料来源:David Malekahmadi

【讨论】:

  • @aytimothy 任何接受您的 DDL 和 DML sql 代码并且您可以实际实施更改的地方,例如 PHPmyadmin 或 DBeaver 等。
  • 它对我很有用,但我很好奇出了什么问题以及如何解决这个错误?
  • @DeepakKeynes 很高兴你修复了它,当我当时遇到同样的问题时,我记得它突然发生了,我的表实际上是一个 WordPress 表,我管理了很多网站,没有一个有这样的东西,但我有根据的猜测是,所有数据库都只是聪明的文件管理器,硬提交或巨大更新或频繁读取总是有可能使数据库失去对事务历史的跟踪并使表被撤消,当你调用该表,它变得像 80% ok,通过这个命令你要求 mysql 清理它的烂摊子。
【解决方案3】:

这非常适合我

首先从您的 phpmyadmin 仪表板导航到 SQL 查询

复制下面的代码粘贴并执行

repair table DATABASENAME.TABLENAME use_frm;

【讨论】:

  • 被低估的最佳答案
  • 这行得通!在执行此操作之前,我不得不从控制台运行 mysql 并跳过授权表。 mysqld --console --skip-grant-tables --skip-external-locking
  • 它对我很有用,但我很好奇出了什么问题以及如何解决这个错误?
【解决方案4】:

随便用

REPAIR TABLE mysql.user

【讨论】:

    【解决方案5】:

    最简单的方法

    检查损坏的表,然后选择/单击修复表。

    试试这个我希望它会工作。

    【讨论】:

      【解决方案6】:

      我在 XAMPP 版本 7.3.16 下也遇到了这个“bozo”错误,所以我肯定不会很快升级。我使用 SQLYog 来管理我的数据库,因此我能够修复错误中列出的特定表 - mysql.db。我不知道它的命令行版本是什么,但这是我在 SQLYog 中检查的选项的屏幕截图:

      【讨论】:

      • 命令行版本:REPAIR TABLE db EXTENDED USE_FRM
      【解决方案7】:

      运行这两个查询:

      CHECK TABLE `users`
      

      CHECK TABLE `db`
      

      对损坏的表运行以下查询

      REPAIR TABLE `users`
      

      和/或

      REPAIR TABLE `db`
      

      【讨论】:

        【解决方案8】:

        我遇到了问题 #1034-表 'db' 的索引已损坏;尝试在phpmyadmin中修复它

        步骤:1 运行这两个查询:

        REPAIR TABLE mysql.db
        REPAIR TABLE mysql.user
        

        对损坏的表运行以下查询

        REPAIR TABLE mysql.db
        REPAIR TABLE mysql.user
        

        步骤:2 如下图所示: 检查损坏的表,然后选择/单击修复表。

        为了更好的解释点击这个链接: https://www.youtube.com/watch?v=gmDVopwfJMM&t=17s

        【讨论】:

          【解决方案9】:

          更改root用户密码后出现1034问题。 我在phpMyAdmin页面左下角的控制台中查询了以下内容。

          修复表 mysql.db

          修复表mysql.user

          【讨论】:

            【解决方案10】:

            mysql.user 不是表,是视图,所以不能修复。不用担心,修复mysql中的所有其他表即可

            【讨论】:

              【解决方案11】:

              步骤 1. 在您的 XAMPP 安装目录中找到“\phpMyAdmin\libraries\”

              步骤 2. 在上面的文件夹中,找到这个文件 > " check_user_privileges.inc.php "

              第 3 步。在您选择的代码编辑器中打开上述文件并找到第 28 行
              " $checkUserPrivileges->analyseShowGrant(); "

              步骤 4. 删除第 28 行并添加以下代码:

              $GLOBALS['is_create_db_priv'] = true;
              $GLOBALS['is_reload_priv'] = true;
              $GLOBALS['db_to_create'] = '';
              $GLOBALS['dbs_where_create_table_allowed'] = array('*');
              $GLOBALS['dbs_to_test'] = false;
              $GLOBALS['db_priv'] = true;
              $GLOBALS['col_priv'] = true;
              $GLOBALS['table_priv'] = true;
              $GLOBALS['proc_priv'] = true;
              

              第 5 步。保存文件并重新启动 XAMPP。

              【讨论】:

                【解决方案12】:

                这对我有用,解决了用户帐户的问题

                 repair table mysql.db use_frm 
                

                【讨论】:

                • 欢迎来到 SO!与许多现有的和赞成的答案相比,这个答案没有添加任何信息。除非您有新的贡献,否则请不要发布答案。
                猜你喜欢
                • 2020-12-02
                • 2016-10-14
                • 2022-09-18
                • 2011-09-04
                • 2018-10-23
                • 2020-04-24
                • 2016-10-12
                • 2010-11-23
                相关资源
                最近更新 更多