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

事件回顾

原始表结构

原始表结构类似如下,原先只有一个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;

要有测试环境,两个环境的数据库环境要保持一致,所有操作在测试环境先测试无误后再到生产环境;

数据库至少一天内的全备数据要有;

直接删表的方法有待商榷,是否有修复成功的可能性;

mysql exist in engine_数据库Table doesn't exist in engine相关推荐

  1. 数据库Table‘*****‘doesn‘t exist问题的解决

    刚下载了navicat15,想着开始用,但是刚打开就出现了如下的问题 把数据库删除了重新连接也不行,还是打不开 后来查阅资料 解决办法如下 1.先确定自己的MySQL安装在什么地方,我的实在D盘 2. ...

  2. mysql 建表 myisam_数据库建表TYPE=MyISAM 与ENGINE=MyISAM 的区别

    TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 (老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM). MySQL 5.1为向下 ...

  3. mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法

    mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法 参考文章: (1)mysql 直接从date 文件夹备份表,还原数据库之后提示 t ...

  4. jpa遇到mysql表名大写怎么办_解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题...

    一般实体类中的属性, 如contentType会被hibernate默认映射为content_type,如果数据库中的字段是contenttype则会不匹配 这个问题有2种解决方法: 我的报错是: j ...

  5. 解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题

    这个问题有2种解决方法: 我的报错是: java.sql.SQLSyntaxErrorException: Table 'gaei_ms.gaei_work_task' doesn't exist 方 ...

  6. 解决数据库报错:Table ‘*.*‘ doesn‘t exist错误

    错误详情 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jd_item.item' does ...

  7. mysql exist in engine_MySQL Table doesn't exist in engine 解决方法

    数据表设置了外键,在phpMyAdmin中显示该表使用中,点击访问表时提示Table doesn't exist in engine. mysql日志显示: 2019-08-24 14:32:25 6 ...

  8. 解决(springboot项目)mysql表名大写,造成jpa Table doesn‘t exist问题

    解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题 参考文章: (1)解决(springboot项目)mysql表名大写,造成jpa Table ...

  9. mysql binlog 丢失_mysql数据库binlog丢失引起的问题

    线上某业务需要对日志信息入库并进行分析最后呈现在管理后台上.某天突然发现后台没有前一天的分析数据.首先认为是java程序问题,于是查看应用程序日志,发现数据缺失的那天应用程序日志也没有记录,很是奇怪. ...

最新文章

  1. 推荐八款来自极客标签的超棒前端特效[第八期]
  2. mysql 数据相加_mysql,php_mysql查询将两列数值相加问题,mysql,php,sql - phpStudy
  3. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出
  4. 提升你的职场竞争力——“低代码开发师”来了!
  5. WinForm绘制直线、曲线、矩形、椭圆、圆弧
  6. 调试 SharePoint 解决方案
  7. golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
  8. 操作系统和语言的关系(转载)
  9. 迅为IMX6Q PLUS开发板烧写Android6.0系统方法
  10. uva 10474 - Where is the Marble?
  11. [转]程序员资料整理
  12. Dubbo Remoting模块详解
  13. gbdt python_GBDT回归的原理及Python实现
  14. Excel数据透视表怎么做
  15. 梦幻西游python验证成语_python正则表达式抓取成语网站
  16. UG\NX二次开发 判断两个圆柱面共轴的思路
  17. 测试人员必知的软件测试文档有哪些?
  18. linux centos7 增加ipv6配置
  19. 神经元是如何组成神经网络?
  20. 平面解析几何----过抛物线外一点和焦点的连线平分切点弦的两切点和焦点组成的角

热门文章

  1. 嵌入方法在推荐系统中的应用
  2. 蓝桥杯青少儿创意编程往届真题或样题收集分享!
  3. 评中级职称论文挂名可以快速通过职称评审吗?
  4. c++ Socket 通过域名进行网络连接
  5. VBA:EXCEL粘贴时跳过有公式单元格
  6. 【揭秘】ips细胞CRO服务
  7. Java 删除文件和目录代码
  8. Pygame最常用的模块详解
  9. office 2013下载及安装方案
  10. 思博伦Spirent Python脚本自动化测试