如何修复MYSQL数据库因断电造成的数据损坏

如何修复MYSQL数据库因断电造成的数据损坏,第1张

修复MYSQL数据因断电造成的数据损坏

在使用MySQL数据库的时候,都碰到过因断电造成数据库损坏的情况,大家都知道,断电或非正常关机是导致MySQL数据库出现错误最常见的原因,如何恢复MySQL数据库是大家都非常头痛的问题。目前有方法可以帮助大家恢复损坏的MySQL数据库吗?

当用户出现断电造成的MySQL数据库丢失损坏时,如果能进入MySQL软件,但是提示错误信息,用户可以通过“系统维护”—“数据库压缩修复”,压缩下数据库(有些软件在“系统设置”—“系统维护”—“数据库备份\恢复”中),这种方法只适合一小部分的数据库故障修复,功能性并不高。

现在网络上有两种比较推荐使用的MySQL数据库恢复方法,一种方法使用MySQL(和PHP搭配之最佳组合)的check

table和repair

table

的sql语句,另一种方法是使用MySQL(和PHP搭配之最佳组合)提供的多个myisamchk,

isamchk数据检测恢复工具。在很多用户看来,这两个方法都比较复杂,并不适合大多数的用户使用。另外,这两种方法并不能有效的恢复MySQL数据库,可能还会造成数据库被进一步损坏,造成大家无法挽回的损失。根据以上几个原因,这两种MySQL数据库恢复方法并不建议大家使用。

数据库被损坏分以下几种情况:

1、严重损坏

2、轻度损坏

3、有些表被损坏或有些表的部分记录被损坏

Windows上安装了XMAPP-controller之后间歇性出现MySQL无法启动,查看日之后发现是innodb的报错,报错信息如下:

度娘上各种答案无法解决,后来直接看官方文档,直接上解决方案:

踩坑指南 - - *** 作配置前需要做这些 *** 作:

1、配置my.cnf 配置innodb_force_recovery = 1 6 试到正确为止,重启MySQL

2、导出数据脚本 mysqldump -uroot -p123456 test >test.sql 导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。 注意:这里的数据一定要备份成功。然后删除原数据库中的数据。

3、删除ib_logfile0、ib_logfile1、ibdata1 备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除

4、配置my.cnf 将my.cnf中innodb_force_recovery 这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务

5、将数据导入MySQL数据库 mysql -uroot -p123456 test <test.sql

或者用Navicat将备份的数据导入到数据库中。 如果在导入数据过程中发生tablespace不存在的问题,请删除data目录相应database下的文件。

我们都知道,在mysql (这里只探讨innodb) 中delete数据,并非真实删除,而是在这行数据上打了一个del的标记,所以这行占用的空间也并不会释放,但是空间可以被复用,所以期望用delete数据来释放空间的同学可以醒醒了。这样就造成了空间上的碎片,那么如果干掉这些碎片呢。

这里先说结论,alter table语句可以触发表重建,消除碎片空间。

mysql中的数据存储结构大概是下面这个样子的

而delete掉的标记会记录在头信息中。

做个实验,看看空间是否真的没有释放;

创建一张表user,并插入很多数据

查看表的文件大小

再随便插入几条

ok这里看到文件大小增加了16k,这是因为mysql的一页就是16k,所以文件大小是16k、16k的增长的。

这时候我们删除大量的数据再次查看文件大小,仍然是272k,索命,数据虽然删除,但是空间没有释放。

这里我们对主键执行一个alter table语句

再次查看文件大小

ok 文件大小明显的减少,这里说明主键的alter语句会重建表,并且释放碎片空间;

这时候我们再删除大量的数据再次查看文件大小,这里我们对普通列执行一个alter table语句

再次查看文件大小

ok 文件大小明显的减少,这里说明普通列的alter语句会重建表,并且释放碎片空间;


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8552337.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存