zoukankan      html  css  js  c++  java
  • 数据库Table doesn't exist in engine

    前一段在月黑风高的夜里,修改线上服务器的表结构,直接导致崩溃,在此记录过程;

    事件回顾

    原始表结构

    原始表结构类似如下,原先只有一个bill_sn的唯一索引(索引类型为HASH,这里本身就是有些问题的);

    CREATE TABLE `op_bill`(`id` bigint(20) NOT NULL AUTO_INCREMENT,
    `billSn` varchar(17) NOT NULL COMMENT '单号',
     `imcome` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '收入金额',
     `outgo` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '支出金额',
     `currentBalance` decimal(10,2) NOT NULL COMMENT '当前帐户余额',
     `type` int(10) NOT NULL DEFAULT '1' COMMENT '1 支付 2 退款 3 充值',
     `createAt` datetime NOT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `bill_sn` (`billSn`) USING HASH,
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='流水信息(帐户余额变更记录)';
    

    修改表结构

    • 修改语句很简单,如下:
    ALTER TABLE `op_bill` ADD INDEX `create_at` (`createAt`) USING BTREE ;
    
    • 执行后提示:ERROR 2013 (HY000): Lost connection to MySQL server during query
    • 再次刷新后提示 对该表的任何操作均会提示:Table doesn't exist in engine,但show tables可以显示出该 表

    处理过程

    尝试1:
    查看表结构文件及数据文件,无缺失
    查询ibdata/ibdata_logfile1/ibdata_logifle2等文件,无缺失;
    重启数据库无效;
    
    尝试2:
    新建一张相同表结构的表,表名定义为xxx_1,修改项目中对应的表,让线上环境能够写入数据,记录当前的position地址;
    在测试环境测试,删除原表,提示一个警告,查询表已经删除,但新建该表结构时又提示该表存在,已经删除表结构文件与表数据文件,尝试几次无果;
    重构测试数据,在强制恢复模式下可以完全删除该表,然后重建表结构(xxx);
    
    恢复数据
    • 找到之前冷备份的数据,筛出该的数据,导入;
    • 从冷备数据找到备份时的postion,和数据库donw时的position,从mysql-binlog中找出该时段内该表的执行sql(mysqlbinlog -d xxx > xxx.sql);
    • 从sql中grep该表的记录,并导入到表中;
    • 将异常时间段内的数据(xxx_1)写入到xxx表中(insert inot xxx select * from xxx_1);

    异常总结

    • 这次可能是遇到了mariadb的bug;
    • 要有测试环境,两个环境的数据库环境要保持一致,所有操作在测试环境先测试无误后再到生产环境;
    • 数据库至少一天内的全备数据要有;
    • 直接删表的方法有待商榷,是否有修复成功的可能性;
  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/417xiaoliu/p/11041203.html
Copyright © 2011-2022 走看看