mysql error -1_【Mysql】SQLException: Got error -1 from storage engine 问题解决!

错误信息:

Caused by: java.sql.BatchUpdateException: Got error -1 from storage

engine

at

com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.

at

com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.

at

org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:222)

at

org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:289)

at

org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:288)

at

org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:883)

at

org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:883)

at

org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1897)

at

org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1897)

at

org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)

at org.apache.spark.scheduler.Task.run(Task.scala:85)

at

org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)

at

at

at

Caused by: java.sql.SQLException: Got

error -1 from storage engine

at

com.mysql.jdbc.SQLError.createSQLException(SQLError.

at

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.

at

com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.

at

com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.

at

com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.

at

com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.

at

com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.

at

com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.

... 14 more

解决方法:

是由于innodb_force_recovery的值不为0导致的

问题解决过程 :

①通过sql语句:show

variables like 'innodb_force_recovery';

查看它的值

②如果不为0则会导致某些操作被禁止

③将innodb_force_recovery修改为0

原理分析:

MySQL数据库,当innodb表空间损坏时候,尝试启动数据库不成功,可以使用innodb_force_recovery参 数进行强制启动

在主配置文件my.cnf中添加

innodb_force_recovery=6

****************************

innodb_force_recovery参数解释:

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况,默认值为0,表示当需要恢复时执行所有的恢复操作。

当不能进行有效的恢复操作时,mysql有可能无法启动,并记录下错误日志。

innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。

当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

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):不执行前滚的操作。

***************************

修复表空间受损的表:

数据起来后,innodb类型的表不能写操作,但可以读,此时对表做check,查找到异常的表,读取出来,导入到myisam表里面,drop原表

然后在my.cnf中去掉innodb_force_recovery的设置,重启mysql

把myisam表转成innodb表;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值