服务器停电宕机导致MySQL无法启动的问题

本文来自好友小菜哥的投稿,对,他又弄丢数据了。

事情起因: 因为公司停电,导致服务器宕机了(没有UPS的,不要问为什么不买一个),服务器启动之后,启动服务,然后服务器很不情愿的给你报了个错误;

Starting MySQL.. ERROR! The server quit without updating PID file (/data2/mysql/mysql.pid).

呵呵,起不来了。查看日志发现是msyql库损坏了,没办法启动;那我的数据怎么办呢。数据库啊。
开始谷歌修复方法:

1、备份data目录数据;mysql有一个备份还原的办法,就是直接拷贝data目录下的数据直接还原,这里我们是mysql库出现问题 我们就要初始化mysql,所以先备份data目录下面所有的东西到其他盘;

/data2/mysql/data mv  /data2/mysql/data/*   /data2/back/(备份目录自己建),

2、初始化mysql,记得我们在编译安装的时候,要跑一个初始化脚本,对,就是这个脚本,再重新跑一次就可以;

cd /usr/local/mysql ./scripts/mysql_install_db --user=mysql 初始化mysql,成功之后;重新启动服务

./bin/mysqld_safe --user=mysql & 服务启动成功;mysql的启动问题修复了。然后设置帐号密码。密码最好设置和原来的一样的(这个就不用教吧)。

3、这个时候你肯定还在想,mysql起来了有什么用,我的数据还没有呢,程序还是连不上数据库。下面我们就开始恢复之前的数据; 首先,我们先进数据库,创建需要还原的数据库。create database udb; (udb这里是我的库);这个时候在data目录下面就有一 个udb的文件夹,然后我们停掉mysql服务,讲我们原来备份的data目录下的udb库的东西全部拷贝过来;cp -r /data/back/data/udb/*  ./udb/ 然后将复制过来的文件授权给mysql用户; chown -R mysql.mysql . 然后,启动服务;服务正常启动,如果启动还是报错,检查报错什么问题。ps aux|grep mysql

4、进入mysql,切换到udb库,show tables;  发现之前的表都回来了。这个时候不能高兴的太早,select查询一下表 内容,会发现又给你一个大写的ERROR 1064 (42000): 然后心里就一顿MMP了。明明表都回来了,为什么数据没回来呢。 经过一顿谷歌,原来还有几个文件是要恢复的;在原来备份的data目录下面,有几个ib开头的文件;ibdata1  ib_logfile0 这几个文件是mysql在运行的时候,临时的数据都存在这里,并没有真正写入表,所以显示表内容的数据都在这里,具体的 可以去根据这几个文件看看详细的介绍。停止mysql服务,把这几个文件也拷贝到现在的data目录下面去;全部覆盖现在文件夹里的内容; 然后重启服务,进入mysql,切换数据库,再来一个select,你会发现可爱的数据又回来了。

总结:

1、在修复的时候不要慌,因为mysql的硬性备份还原机制,可以直接用data下面的文件进行环境,所以只要不是物理损坏,一般情况下问题不会太大 就是时间和耐心的问题;

2、认真看日志,在最开始启动的时候,我们只知道mysql起不来了,并不知道真正的原因,这样是没有任何办法的;最后找到日志发现是mysql 库损坏导致没办法启动;这个时候就好办了,mysql库坏了就搞mysql库咯,对症下药;

3、数据恢复的问题,在mysql还原的时候我之前也以为是udb库的表损坏了,也用网上的各种命令进行修复检查;发现并没有什么用;在这里记得不管怎么折腾, 记得保留一份最原始的数据,折腾坏了现在的,大不了重新再来,要是没有原始数据,那就很容易造成二次损坏,到那个时候数据就彻底没有救了。

4、数据库还是定时做好备份吧;

5、有钱还是买几个UPS吧;买APC的吧,免得山特和深圳山特傻傻分不清。

6、可以考虑请雷神常驻公司。

原创文章,转载请注明: 转载自笛声

本文链接地址: 服务器停电宕机导致MySQL无法启动的问题

7 条评论

  • 广州网站建设 2018年8月22日 回复

    先收藏,下次要是遇到了好解决

  • 姜辰 2018年8月23日 回复

    最后一招:实在不行就跑路~

  • 暮色 2018年8月25日 回复

    我觉得吧,还是要等我租用服务器再看。。

  • 西枫里博客 2018年8月28日 回复

    也,笛大佬什么时候更新了,哇勒个去。

  • 云顶天的博客 2018年8月29日 回复

    哈哈,没UPS至少也得日常备份一下或者干脆热备~风险意识要加强~

  • 随望淡思 2018年10月1日 回复

    这么多建议中,只看到备份数据库,是最简单实在的做法!我的做法都是离线备份到本地硬盘上

    • dige 2018年10月3日 回复 作者

      企业环境备份出来的mysql文件,动不动就几十GB的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注