派派的MySQL数据库突然就爆炸了/.. writeor的博客 wr的小窝喔~
  • 欢迎访问wr的小窝~,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站.
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 嘟嘟嘟嘟嘟嘟啦~~

派派的MySQL数据库突然就爆炸了/..

未分类 writeor 11个月前 (10-17) 276次浏览 已收录 0个评论

最开始的发现网站上不去了,去派派那边发现数据库启动失败…报错截图如下。
派派的MySQL数据库突然就爆炸了/..

pi@raspberrypi:~ $ systemctl status mariadb.service
● mariadb.service - MariaDB 10.3.39 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2025-10-18 03:07:22 CST; 11s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 24519 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
  Process: 24520 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 24522 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && syst
  Process: 24566 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
 Main PID: 24566 (code=exited, status=1/FAILURE)
   Status: "MariaDB server is down"

10月 18 03:07:20 raspberrypi systemd[1]: Starting MariaDB 10.3.39 database server...
10月 18 03:07:21 raspberrypi mysqld[24566]: 2025-10-18  3:07:21 0 [Warning] Can't create test file /var/lib/mysql/raspberrypi.lower-test
10月 18 03:07:22 raspberrypi systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
10月 18 03:07:22 raspberrypi systemd[1]: mariadb.service: Failed with result 'exit-code'.
10月 18 03:07:22 raspberrypi systemd[1]: Failed to start MariaDB 10.3.39 database server.

根据你提供的完整错误信息,MariaDB 启动时崩溃的根本原因是 InnoDB 引擎在尝试读取系统表空间(innodb_system,即 ibdata 文件)中的页时,检测到页号越界:

根据你提供的完整错误信息,MariaDB 启动时崩溃的根本原因是 InnoDB 引擎在尝试读取系统表空间(innodb_system,即 ibdata 文件)中的页时,检测到页号越界:

sql
InnoDB: Trying to read page number 3607101440 in space 0, space name innodb_system,
which is outside the tablespace bounds. Byte offset 0, len 16384
Please check that the configuration matches the InnoDB system tablespace location (ibdata files)

这说明 InnoDB 尝试访问 ibdata 文件中的无效区域。常见导致这种情况的原因包括:

解决建议步骤
1. 备份现有数据
立即备份当前 /var/lib/mysql 下的所有数据文件:

bash
sudo systemctl stop mariadb
sudo cp -a /var/lib/mysql /var/lib/mysql_backup_$(date +%F_%T)

即使数据有损坏,也应先备份。2. 检查 ibdata 文件状态及权限
确认 ibdata 文件存在:

bash
ls -lh /var/lib/mysql/ibdata*

确认属于 mysql 用户:

我的话,好像第一次文件夹是有权限的,但后面我把文件夹整个都删掉了一次,权限就没有了,导致服务起不来,需要确保是有mysql权限的

bash
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql

b. Force recovery 试启动,导出数据
在配置 /etc/mysql/my.cnf 或 /etc/mysql/mariadb.conf.d/50-server.cnf 中 [mysqld] 添加:

ini
innodb_force_recovery = 1

逐级增加 innodb_force_recovery 至 6,试启动数据库:

bash
sudo systemctl restart mariadb

如果成功启动,立即导出数据:

bash
mysqldump -u root -p --all-databases > all_databases_backup.sql

完成备份后清除 innodb_force_recovery 配置,重建数据目录恢复。
这里我是从1开始,加到6才正常把服务启动了起来…但好像影响只是这个数字越高,恢复服务后能做的操作越少,比如像我加到6可能就没法修改内容了。因为我只是想把数据都导出来,没法修改也没啥问题。
2. 重新启动MariaDB服务

bash
sudo systemctl restart mariadb

查看状态,如果启动成功:

bash
sudo systemctl status mariadb

并确认在日志中没有新崩溃信息。

3. 导出所有数据库数据
如果启动成功,赶紧用 mysqldump 导出全部数据:

bash
mysqldump -u root -p --all-databases > all_databases_backup.sql

最好拷贝到其他安全存储。4. 完全重建数据目录(清理损坏文件)
备份完数据后,停止MariaDB:

bash
sudo systemctl stop mariadb

删除 InnoDB 的系统表空间和日志文件:

bash
sudo rm /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*

注意:执行这步会丢失InnoDB数据,确保已经备份。
在这一步其实我还删除了很多文件,基本上把带ib字样的都删除了,但因为后面导入的时候物理表也报错,所有把两个物理表也删掉了,其他的就不能删除了,删了会导致服务起不来,无法后续导入备份

派派的MySQL数据库突然就爆炸了/..
5. 清理 innodb_force_recovery 配置
编辑配置文件,删除之前添加的:

bash
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

删除或注释掉 innodb_force_recovery 。

6. 重新启动MariaDB,导入备份数据

bash
sudo systemctl start mariadb
mysql -u root -p < all_databases_backup.sql

后续在启动服务后重新导入备份的时候,出现报错:

但后面我直接没管这个报错就正常用了….好像是没什么问题的,AI说让到具体的表里做什么操作,但我真去操作了他又说表不存在…

ERROR 1813 (HY000) at line 3137: Tablespace for table '`mysql`.`gtid_slave_pos`' exists. Please DISCARD the tablespace before IMPORT

派派的MySQL数据库突然就爆炸了/..

这个错误的意思是:MySQL试图导入的表 mysql.gtid_slave_pos 的表空间(*.ibd 文件)已经存在,导致导入失败。MySQL要求先执行 DISCARD TABLESPACE 操作,以丢弃现有的表空间,再重新导入。导致原因
恢复的备份中包含了系统库 mysql 的表,如 gtid_slave_pos。
该表的表空间文件(在 datadir/mysql/gtid_slave_pos.ibd)已经存在,导致无法导入新的表空间。
通常情况下,mysql 库中某些表是系统表,直接导入可能会发生冲突。
解决方案
方案一:跳过系统库,单独恢复普通数据库
通常不建议直接恢复 mysql 库的全部表,尤其是带有物理表空间的表(*.ibd 文件)。
如果备份中包含了不止用户数据,也包含了 mysql 库相关的DDL和数据,可以只恢复普通数据库:

编辑 all_databases_backup.sql,去掉 mysql 表相关的导入语句,比如删除 mysql.gtid_slave_pos 的导入语句。
或者分别备份和恢复,建议只恢复用户数据库,系统库通过MySQL自身初始化。


wr的小窝 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:派派的MySQL数据库突然就爆炸了/..
喜欢 (1)
[[email protected]]
分享 (0)

您必须 登录 才能发表评论!