Mysql表顺坏导致服务无法启动
博客专区 > robortly 的博客 > 博客详情
Mysql表顺坏导致服务无法启动
robortly 发表于2年前
Mysql表顺坏导致服务无法启动
  • 发表于 2年前
  • 阅读 35
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

摘要: mysql表顺坏一般由以下情况造成的: 1、 服务器突然断电导致数据文件损坏 2、 强制关机,没有先关闭mysql 服务 3、 mysqld 进程在写表时被杀掉 4、 使用myisamchk 的同时,mysqld 也在操作表 5、 磁盘故障 6、 服务器死机 7、 mysql 本身的bug 第1,2是经常遇到的情况,也是最容易产生坏表的情况,所以在此分析下遇到这种情的应对措施。

针对以前好好的Mysql服务器进程能正常启动,突然启动起来的时候报:

通过上面的技术文章说明找到:innodb_force_recovery=6

对innodb_force_recovery设置详情描述如下:

1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

====================================================================

好了,配置好值为6就可以正常启动服务了。但是你的整个数据库进入只读状态,不能进行任何更新修改操作。尝试备份会出现服务停止的情况......My goooooooood...........

====================================================================

占时没有找到更好的应对策略。因为是数据库顺坏了,现在的表数据只能是一个只读状态,而实际中数据才是最重要的,所以我们就将所有能查看的数据进行导出吧。

====》接着一个个导出好了sql文件,中途会发下有些表是无法导出的,这个时候就需要进一步将DDL语言复制,手动执行,生成表的模型到新的数据库实例上去。如果这个表里面有数据,那么你就只能通过日志去恢复了,我查看了日志,可以通过搜索日志里面的表名进行定位错误。由于我遇到的这个数据表没有数据,所以也就没有恢复了。

====》一个个数据导出来后,就进行一次备份吧......

可以采用以下手段预防mysql 表损坏: 

1 、定期使用myisamchk 检查MyISAM 表(注意要关闭mysqld ),推荐使用check  table 来检查表(不用关闭mysqld )。 

2 、在做过大量的更新或删除操作后,推荐使用OPTIMIZE TABLE 来优化表,这样既减少了文件碎片,又减少了表损坏的概率。 

3 、关闭服务器前,先关闭mysqld (正常关闭服务,不要使用kill -9 来杀进程)。 

4 、使用ups 电源,避免出现突然断电的情况。 

5 、使用最新的稳定发布版mysql ,减少mysql 本身的bug 导致表损坏。 

6 、对于InnoDB 引擎,你可以使用innodb_tablespace_monitor 来检查表空间文件内文件空间管理的完整性。 

7 、对磁盘做raid ,减少磁盘出错并提高性能。 

8 、数据库服务器最好只跑mysqld 和必要的其他服务,不要跑其他业务服务,这样减少死机导致表损坏的可能。 

9 、不怕万一,只怕意外,平时做好备份是预防表损坏的有效手段。

 

共有 人打赏支持
粉丝 8
博文 69
码字总数 41600
×
robortly
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: