mysql应对磁盘损坏_MySQL 磁盘空间满导致表空间相关数据文件损坏故障处理

近期,遇到一个mysql数据库因为磁盘空间满导致表空间相关数据文件损坏而无法启动,相关处理过程如下:

1、mysql数据库磁盘空间满报错提示

2019-09-30T01:25:10.326653+08:00 22822601 [Note] Aborted connection 22822601 to db: 'unconnected' user: 'bpuser' host: 'localhost' (Got an error reading communication packets)

2019-09-30T01:25:12.893926+08:00 21573334 [ERROR]

Disk is full writing '/data/mysql/mydata/blog/mysql-bin.002059' (Errcode: 15425568 - No space left on device). Waiting for someone to free space...

2019-09-30T01:25:12.893974+08:00 21573334 [ERROR] Retry in 60 secs. Message reprinted in 600 secs

2019-09-30T01:25:27.822078+08:00 0 [ERROR] [FATAL] InnoDB: Native Linux AIO interface. io_submit() call failed when resubmitting a partial I/O request on the file ./mydata/history_uint2019-09-30T01:25:28.811224+08:00 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled

2、mysql重启失败报错提示

2019-09-30T01:25:35.462390+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947029007360

2019-09-30T01:25:35.683704+08:00 0 [ERROR] InnoDB:

Space ID in fsp header is 4275156, but in the page header it is 164.

2019-09-30T01:25:35.683774+08:00 0 [ERROR] InnoDB: Header page contains inconsistent data in datafile: ./mydata/history_uint#P#p201910130000.ibd, Space ID:18446744073709551615, Flags: 17039360. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html for how to resolve the issue.

2019-09-30T01:25:35.683865+08:00 0 [Note] InnoDB: Page size:1024. Pages to analyze:64

......

2019-09-30T01:25:35.689292+08:00 0 [Note] InnoDB: Chosen space:164

2019-09-30T01:25:35.689327+08:00 0 [ERROR] InnoDB: Corrupted page [page id: space=164, page number=0] of datafile './mydata/his_uint#P#p201910130000.ibd' could not be found in the doublewrite buffer.

......

2019-09-30T01:25:50.175443+08:00 0 [Note] InnoDB: Starting crash recovery.

2019-09-30T01:25:50.462341+08:00 0 [ERROR] InnoDB: Tablespace 431 was not found at ./mydata/his_uint#P#p201910130000.ibd.

2019-09-30T01:25:50.462391+08:00 0 [ERROR] InnoDB:

Set innodb_force_recovery=1 to ignore this and to permanently lose all changes to the tablespace.

2019-09-30T01:25:50.481016+08:00 0 [ERROR] InnoDB: Cannot continue operation.

2019-09-30T01:28:44.666477Z mysqld_safe Logging to '/data/mysql/mydata/errlog/mysql.err'.

2019-09-30T01:28:44.736202Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/mydata/data

3、安装mysql报错日志提示

在参数文件中加入:innodb_force_recovery=1 重新启动数据库,注意此参数是让数据库引擎忽略崩溃的事务或者数据块,会丢失数据。

2019-09-30T14:59:29.161408+08:00 0 [Note] InnoDB: At LSN: 1947033396675: unable to open file ./mydata/history_uint#P#p201907310000.ibd for tablespace 357

2019-09-30T14:59:29.173311+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947034250240

2019-09-30T14:59:29.391928+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947039493120

2019-09-30T14:59:29.619846+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947044736000

2019-09-30T14:59:29.883131+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947049978880

2019-09-30T14:59:30.150950+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947055221760

2019-09-30T14:59:30.412127+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947060464640

2019-09-30T14:59:30.682865+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947065707520

2019-09-30T14:59:30.946472+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence number 1947070950400

2019-09-30T14:59:31.208800+08:00 0 [Note] InnoDB: Doing recovery: scanned up to log sequence nu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
MySQL或MariaDB中,当执行DELETE语句删除数据时,磁盘空间通常不会立即释放。这是因为MySQL使用了一种称为“Undo Log”的机制来实现事务的回滚和MVCC(多版本并发控制)功能。 当执行DELETE语句时,MySQL会将被删除的数据记录存储在Undo Log中,以便在需要回滚事务或提供MVCC功能时使用。这样做的好处是可以保证数据的一致性和并发性。 然而,这也导致磁盘空间没有立即释放的情况。要释放磁盘空间,可以通过以下几种方式: 1. 执行OPTIMIZE TABLE命令:这个命令会重新组织表的物理存储,包括回收已删除的空间。但是需要注意的是,OPTIMIZE TABLE命令可能会导致表被锁定,并且在大表上执行时可能需要较长时间。 2. 使用TRUNCATE TABLE命令:TRUNCATE TABLE命令会删除表中的所有数据,并释放磁盘空间。但是需要注意的是,TRUNCATE TABLE命令是DDL语句,会自动提交事务并且无法回滚。 3. 使用ALTER TABLE命令:通过ALTER TABLE命令重建表,可以释放磁盘空间。例如,可以创建一个新表并将数据插入其中,然后删除原表。但是需要注意的是,这种方法可能会导致表结构和索引的重新构建,可能会影响性能。 4. 等待自动回收:MySQL会在后台自动回收已删除数据的磁盘空间,这个过程称为垃圾回收。可以通过设置innodb_undo_log_truncate选项来控制垃圾回收的频率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值