mysql exist in engine_数据库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;
要有测试环境,两个环境的数据库环境要保持一致,所有操作在测试环境先测试无误后再到生产环境;
数据库至少一天内的全备数据要有;
直接删表的方法有待商榷,是否有修复成功的可能性;
mysql exist in engine_数据库Table doesn't exist in engine相关推荐
- 数据库Table‘*****‘doesn‘t exist问题的解决
刚下载了navicat15,想着开始用,但是刚打开就出现了如下的问题 把数据库删除了重新连接也不行,还是打不开 后来查阅资料 解决办法如下 1.先确定自己的MySQL安装在什么地方,我的实在D盘 2. ...
- mysql 建表 myisam_数据库建表TYPE=MyISAM 与ENGINE=MyISAM 的区别
TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 (老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM). MySQL 5.1为向下 ...
- mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法
mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法 参考文章: (1)mysql 直接从date 文件夹备份表,还原数据库之后提示 t ...
- jpa遇到mysql表名大写怎么办_解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题...
一般实体类中的属性, 如contentType会被hibernate默认映射为content_type,如果数据库中的字段是contenttype则会不匹配 这个问题有2种解决方法: 我的报错是: j ...
- 解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题
这个问题有2种解决方法: 我的报错是: java.sql.SQLSyntaxErrorException: Table 'gaei_ms.gaei_work_task' doesn't exist 方 ...
- 解决数据库报错:Table ‘*.*‘ doesn‘t exist错误
错误详情 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'jd_item.item' does ...
- 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 ...
- 解决(springboot项目)mysql表名大写,造成jpa Table doesn‘t exist问题
解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题 参考文章: (1)解决(springboot项目)mysql表名大写,造成jpa Table ...
- mysql binlog 丢失_mysql数据库binlog丢失引起的问题
线上某业务需要对日志信息入库并进行分析最后呈现在管理后台上.某天突然发现后台没有前一天的分析数据.首先认为是java程序问题,于是查看应用程序日志,发现数据缺失的那天应用程序日志也没有记录,很是奇怪. ...
最新文章
- 推荐八款来自极客标签的超棒前端特效[第八期]
- mysql 数据相加_mysql,php_mysql查询将两列数值相加问题,mysql,php,sql - phpStudy
- mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出
- 提升你的职场竞争力——“低代码开发师”来了!
- WinForm绘制直线、曲线、矩形、椭圆、圆弧
- 调试 SharePoint 解决方案
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
- 操作系统和语言的关系(转载)
- 迅为IMX6Q PLUS开发板烧写Android6.0系统方法
- uva 10474 - Where is the Marble?
- [转]程序员资料整理
- Dubbo Remoting模块详解
- gbdt python_GBDT回归的原理及Python实现
- Excel数据透视表怎么做
- 梦幻西游python验证成语_python正则表达式抓取成语网站
- UG\NX二次开发 判断两个圆柱面共轴的思路
- 测试人员必知的软件测试文档有哪些?
- linux centos7 增加ipv6配置
- 神经元是如何组成神经网络?
- 平面解析几何----过抛物线外一点和焦点的连线平分切点弦的两切点和焦点组成的角