如何修复损坏的 xampp 'mysql.user' 表?

2021-11-20 00:00:00 xampp mysql

我昨天使用 Xampp 创建了一些简单的基于 Web 的实用工具.今天我想继续研究它,但 xampp 控制面板给了我一些错误.

I used Xampp yesterday to create some simple Web-based utility tool. Today I wanted to continue working on it but xampp control panel gave me some weir errors.

这是 MySQL 错误日志:

This is the MySQL Error Log:

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服务甚至无法启动,所以我有点无助...

Tried already to repair, but the mySQL Service won't even start, so I'm kinda helpless...

推荐答案

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

This is almost certainly a known bug in mariaDB (ie mySQL). See ApacheFriends.org for the description. Problem occurs after user password changes - often user root.

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

General advice seems to be to cut your losses and downgrade your XAMPP to 7.3.5

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

Otherwise the problem may later recur even after a complete uninstall/re-install of 7.3.7 for example.

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

What follows is a circumvention / repair for Windows/XAMPP users. It assumes you have a backup - which you probably do. (It appears the installation process provides an initial backup.) Idea is to get you back on air without downgrading long enough for the next release to arrive.

走出沼泽的最快方法就是去第 9 步.

Quickest way out of the swamp is just to go to step 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",然后在右侧面板中选中user".
(7) 从With selected"下拉菜单中运行analyze",然后运行repair table".
(8) 如果 'Repair' 失败别无选择,只能 'DROP TABLE user' ....

(1) Find 'my.ini' (eg. c:\xampp\mysql\bin\my.ini )
(2) Insert 'skip-grant-tables' in a new line following label '[mysqld]'. Remove this later.
(3) Now mySQL can be started from the XAMPP control panel.
(4) Start phpMyAdmin from browser and select table 'user' from database 'mysql'
(5) Should see: #1034 Index for table 'user' is corrupt; try to repair it.
(6) Select 'mysql' from left panel then check 'user' in right hand panel.
(7) From the 'With selected' dropdown run 'analyze' then 'repair table'.
(8) If 'Repair' fails no choice but to 'DROP TABLE user' ....

(9) 通过复制以下 3 个文件从分发备份重新创建用户"表.

(9) Recreate 'user' table from the distribution backup by copying the following 3 files.

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 并根据需要添加/删除/编辑用户.

then restarting XAMPP and adding/removing/editing users as you wish.

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

One last point: There seems to be some sort of association between the 'user' and 'db' tables. You may need to repair the 'db' table as per step (7).

相关文章