在 Windows 11 Pro(10.0.22621 Build 22621)上每次全新安装(最新)XAMPP 8.2.4 大约 5-6 天后,MariaDB 10.4.28 在每次运行期间都会开始失败:
有时我直接在 XAMPP 中收到错误:
Attempting to start MySQL app...
Status change detected: running
Status change detected: stopped
Error: MySQL shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.
我完全是新手,但我认为mysql_error.log中没有任何“不寻常”的内容:
[Note] Starting MariaDB 10.4.28-MariaDB source revision c8f2e9a5c0ac5905f28b050b7df5a9ffd914b7e7 as process 20488
[Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
[Note] InnoDB: Uses event mutexes
[Note] InnoDB: Compressed tables use zlib 1.2.12
[Note] InnoDB: Number of pools: 1
[Note] InnoDB: Using SSE2 crc32 instructions
[Note] InnoDB: Initializing buffer pool, total size = 16M, instances = 1, chunk size = 16M
[Note] InnoDB: Completed initialization of buffer pool
[Note] InnoDB: 128 out of 128 rollback segments are active.
[Note] InnoDB: Creating shared tablespace for temporary tables
[Note] InnoDB: Setting file 'C:\XAMPP\mysql\data\ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
[Note] InnoDB: File 'C:\XAMPP\mysql\data\ibtmp1' size is now 12 MB.
[Note] InnoDB: 10.4.28 started; log sequence number 1972203; transaction id 2830
[Note] InnoDB: Loading buffer pool(s) from C:\XAMPP\mysql\data\ib_buffer_pool
[Note] Plugin 'FEEDBACK' is disabled.
[Note] Server socket created on IP: '::'.
但 Windows 事件日志中有一些非常令人费解的条目。
对于每次运行我只得到这个:
Aborting
Fatal error: Can't open and lock privilege tables: Incorrect file format 'db'
或者上面后面跟着:
mysqld.exe: Aria engine: checkpoint failed
mysqld.exe: Can't sync file 'C:\XAMPP\mysql\data\aria_log.00000001' to disk (Errcode: 9 "Bad file descriptor")
mysqld.exe: Error writing file 'C:\XAMPP\mysql\data\aria_log.00000001' (Errcode: 9 "Bad file descriptor")
“坏文件描述符”在我脑海中敲响了“磁盘损坏”的警钟,但 Windows 说不:
(...)
0 bad file records processed.
Phase duration (Bad file record checking): 1.61 milliseconds.
(...)
Windows has scanned the file system and found no problems.
No further action is required.
我尝试了简单删除aria_log.00000001的“白痴”方式。我所取得的成就是:
- MariaDB一次性启动
- 添加额外的行来记录aria_log.00000001未找到
- 创建和使用aria_log.00000002、aria_log.00000003等
但这只是一次“虚拟”运行。所有客户端都可以看到 MariaDB 正在运行(XAMPP 作为Status change detected: running
最后一个日志行并且没有错误),但实际上这是某种奇怪的“锁”,客户端无法检测到这一事实并永远挂起而不会超时:
浏览器也是如此,它永远显示“循环”,直到我手动杀死 db。
之后,Error: MySQL shutdown unexpectedly.
每次运行一切都会恢复到“正常”含义。
我还没有尝试过“暴力模式”(此处)。当一系列“意外停机”开始时,我只是:
- 卸载XAMPP(备份数据)
- 删除整个C:\XAMPP文件夹
- 全新安装 XAMPP 8.2.4
在此之后,我总是“接下来的几天都很好”。一般是五到六个。
我在 Windows 上使用 XAMPP 已有 10 多年了,在从 XP 开始的 Windows 版本上从未遇到过任何问题。到目前为止。
除了永远摆脱 XAMPP 并尝试其他 LAMP(因为重新安装不会带来任何东西)之外,我还能做些什么吗?
编辑:Maria DB 和整个类似服务器的系统(Apache/XAMPP)都没有更新。一切都坚持 XAMPP 8.2.4 和 MariaDB 10.4.28强文本至少半年。唯一的“更新”是我不断的卸载-安装序列(现在就是这样做的)。
编辑:这是 Windows 11 Pro(10.0.22621 Build 22621),因此底层存储系统是单个 SSD 驱动器(KBG50ZNS512G NVMe KIOXIA 512 GB;475 GB 真实容量)。这是一台全新的笔记本电脑,因此磁盘到目前为止已经运行了 2.5 周。
尝试以下命令修复权限表
mysql_upgrade --force -uroot -p
人们可以考虑以下解决方案之一。
数据备份
各种报告(此处和此处)表明解决方案可能是:
许多用户报告上述解决方案有效。我没有尝试过。
文件修复
完全偶然,我在mysql\bin文件夹中发现了一个名为[username].err的文件,其中[username]是您的 Windows 用户名。其内容显示了问题的真正本质(见下文):
并且还提出了可能的解决方案:
我也没有尝试过这个解决方案。
数据库服务器升级
我没有尝试这两种方法中的任何一种,而是将我的 MariaDB 数据库版本更新到最新版本。
这个解决方案要求我对我的 MariaDB 用户施展一些魔法,因为最新的 MariaDB 服务器使用不同的身份验证方法(GSSAPI 插件)而不是旧版本(本机 MySQL 身份验证)。
不幸的是,这个解决方案只工作了 2-3 天,之后MariaDB 开始崩溃,行为完全相同,环境完全相同,而且没有任何恢复的机会。
将其作为 Windows 系统服务运行
在阅读更多线程时,我发现有人声称“所有这些 *nix-services 在 Windows 中作为系统服务运行时工作得更稳定”。
我不知道这个说法有多少真实性,但由于 XAMPP 很容易允许这样做,所以我尝试了这个解决方案:
这个解决方案似乎有效(至少目前如此)。
最后一招。无停止或伪备份
如果上述解决方案开始像所有其他解决方案一样失败,那么对我来说最后的机会是一个古老的肮脏技巧,根本不停止 MariaDB,并且休眠可能的开发 PC 而不是将其关闭。
听起来很疯狂,但正如我的一位朋友所证明的……有效。
所有报告(链接到此处以及我读过的所有报告)都表明 MariaDB 的问题在第一次或第二次关闭时开始。所以……不能让她睡一觉!:]
另一个“愚蠢”和“核心”的解决方案是在 MariaDB 仍然工作时压缩整个 XAMPP 安装,然后在它停止工作时将其“重新创建”回该阶段。有点类似于这里提到的“硬核数据覆盖” 。
对我来说幸运的是,这只是一台开发笔记本电脑,只要它能工作,我根本不在乎数据库包含什么。当然,该解决方案并不适合所有这些数据很重要并且不能简单地覆盖或回滚几天的场景。