|
|
51CTO旗下网站
|
|
移动端

数据库恢复不了? 不存在的!

工作中大家经常会用到存储服务,比如mysql、mongo、redis等,有DBA的话还好,能帮我们管理维护,定期备份等,但是我们往往自己在开发工具平台时自己来搞数据库,就忽略了定时备份,留下了安全隐患。果不其然,最近收到了团队小伙伴的求助,服务器挂了,重启后mysql服务起不来了。关键是没有备份!!

作者:涛神来源:Qtest之道|2018-07-03 14:20

工作中大家经常会用到存储服务,比如mysql、mongo、redis等,有DBA的话还好,能帮我们管理维护,定期备份等,但是我们往往自己在开发工具平台时自己来搞数据库,就忽略了定时备份,留下了安全隐患。果不其然,最近收到了团队小伙伴的求助,服务器挂了,重启后mysql服务起不来了。关键是没有备份!!

经过一番折腾后将处理过程和踩的坑总结出来,供大家参考。MySQL crash 或者 MySQL 数据库服务器 crash 会导致各种各样的问题 ,比如日志损坏、数据文件损坏等等,本案例就是其中的一种,细心从日志中找的相关错误提示,逐步解决即可。首先在出现问题的A机器启动mysql,看下情况。

查看mysql错误日志,找找原因

从日志内容分析来看,数据库在机器crash 导致文件损坏,重启之后无法正常恢复,更无法正常对外提供服务。这里采用非常规手段,首先修改innodb_force_recovery参数,使mysqld跳过恢复步骤,再将mysqld 启动,把数据导出来,然后重新创建数据库。

先来普及一下知识点:

innodb_force_recovery可以设置为1-6,默认是0,大的数字包含前面所有数字的影响。

1. (SRV_FORCE_IGNORE_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):不执行前滚的操作。

注意当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update、 delete这类操作是不允许的。

将/etc/my.cnf下innodb_force_recovery值修改为4后,启动mysql成功

马上导出数据

  1. /usr/local/mysql/bin/mysqldump -uroot -h localhost -P 3306  -p --default-character-set=latin1 --add-drop-database --lock-tables --single-transaction -q --triggers -A --result-file=/home/fuhaitao/3306.sql 

导出成功后找一台B机器,在mysql实例里导入这个sql文件。

  1. mysql -uroot -p -S /tmp/mysql3333.sock --default-character-set=latin1 < 3306.sql 

大功告成,马上去看下数据是否正常

悲催。。。乱码,查看mysql编码方式

编码是utf8,可是我在A机器导出的时候指定了字符集为latin1,所以修改编码为Latin1看下

在查看下数据还是乱码么

不行,说明导入的数据编码与数据库的编码不一致,而且发现由于机器使用人员较多,每个数据库编码都不一致,有utf8的有latin1的,那么只能挨个库来导了。

回到A机器将刚才是乱码的database指定utf8编码导出

将sql文件传到B机器

在B机器上进行导入

执行后在查看下数据是否正常

欧耶,成功。再将A机器mysql停掉,修改/etc/my.cnf 里的innodb_force_recovery值改为0。经过一番折腾,终于把问题解决了,恢复了5年的数据。

最后给大家提几点建议:

1. 如果公司有DBA团队,尽量使用DBA团队的存储服务,他们能够提供专业的支持。

2. 数据库要做定时备份,避免特殊情况发生导致文件损坏,数据丢失。

3. 导入数据时要查看编码方式,保证数据库、数据文件、编辑器等编码方式统一。

【编辑推荐】

  1. 从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历
  2. 数据库MySQL索引优化分析
  3. 分布式之Redis数据库复习精讲
  4. 7 月全球数据库排名:MongoDB 紧追 PostgreSQL
  5. 数据库管理系统:中国还在寻找“正确打开方式”
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java编程思想 第4版

本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊