公司采用的是windows server 2008+mysql,由于种种原因,mysql没有定期备份,也为此次故障埋下了隐患。

  8月某天,突然停电,悲剧的机房UPS有故障没有工作,所有服务器直接断电,顿时有种不祥的预感。来电后幸好所有服务器都正常启动了,不过还是悲剧了,mysql无法启动,服务一启动就报错:mysql 1067 进程意外终止。

        

mysql意外终止1067 mysql 进程意外终止_创建数据库

  查看了系统日志,windows日志并没有给出有用的信息,只是显示

    错误应用程序名称: mysqld-nt.exe,版本: 0.0.0.0,时间戳: 0x4ad764a7
    错误模块名称: mysqld-nt.exe,版本: 0.0.0.0,时间戳: 0x4ad764a7

  通过网上资料查询,多半是innodb引擎日志问题所致,具体处理步骤如下:

  一、在mysql安装路径下修改my.ini配置文件,在尾部添加innodb_force_recovery = 6,此选项可以让mysql启动时跳过修复。对于次选项的详细解释如下:

    innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。
       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):不执行前滚的操作。
     注意
       a 当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
       b 当innodb_purge_threads 和 innodb_force_recovery一起设置会出现一种loop现象,故不建议同时使用,也会是mysql无法启动。

  二、再次启动mysql服务,应该就可以正常启动,使用mysqldump备份数据库:

    >mysqldump -uUSERNAME -pPASSWORD DB_NAME > E:/DBBACK.SQL

    如果备份时候有表数据损坏,会有两种提示:

    1、Incorrect file format ,表格式不正确,只能采用repair语句恢复表结构:

      repair table TB_NAME use_frm;(貌似这种只支持myisam存储引擎)

    2、Counldn't execute 'show create table `userarenalog`':Table ...is marked as crashed and should be repaired(145),同样可以采用repair修复损坏的表:

      repair table TB_NAME

  三、卸载并删除原有mysql数据,重新安装。

  四、重新创建数据库并恢复数据:

    mysql>create database DB_NAME;//创建数据库

    mysql>use DB_NAME;//选中数据库

    mysql>source e:/DBBACK.SQL//恢复数据库

  其实修复过程中间还有诸多弯路,最终这个才是最简单迅速的,希望能给各位借鉴。