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

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

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

[[234959]]

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

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

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

先来普及一下知识点:

[[234960]]

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年的数据。

[[234963]]

***给大家提几点建议:

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

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

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

责任编辑:庞桂玉 来源: Qtest之道
相关推荐

2010-05-17 18:03:31

MySQL 数据库

2011-08-24 09:45:34

Oracle数据库

2018-07-19 06:14:09

2017-12-26 08:25:57

硬盘数据丢失

2023-09-12 08:02:13

viewport断点

2021-01-25 07:21:24

GitHub 开源代码下载

2020-11-03 10:23:22

云计算容器技术

2015-10-20 10:30:59

创业时机

2009-09-12 09:34:18

Windows 7中国售价

2010-01-05 13:52:02

2017-12-07 14:57:13

404互联网错误代码

2018-02-07 14:41:16

数据科学家数据分析数学

2012-05-16 11:35:16

SQL Server拒绝访问

2019-12-31 09:11:01

后台Android系统

2016-12-13 09:05:27

大数据数据分析数据可视化

2009-05-05 17:07:56

2023-03-02 11:44:08

AI技术

2011-07-13 10:01:16

域控制器

2018-07-03 10:09:18

闪存

2021-09-26 05:05:09

WindowWeb JS
点赞
收藏

51CTO技术栈公众号