一.问题描述
拷贝一个大表的表数据的时候,等待时间太久,就在前台通过CTRL+C的方式停掉了
通过show processlist查找到对应的进程,然后进行kill,结果kill完了,依旧在进程列表里,只是被标记为killed
二.解决方案
查看innodb的事务表,发现刚才kill的语句正在进行回滚操作。
trx_rows_modified 代表锁影响的行数,当数值为0时,锁将会释放
最好的办法就是等待innodb自己将事务进行回滚,除此之外,也可以innodb_force_recovery=3不执行事务回滚操作 启动数据库 (慎用)
INNODB_TRX表列的备注:
三.额外的一个报错
在回滚的过程中,错误日志报错了:
只能强制杀进程了
我以为强制杀进程后,启动mysql就没问题了,结果登陆不上,错误日志报错如下:
杀掉所有mysql相关的进程,然后启动mysql服务
四.启用innodb_force_recovery=3
通过第三步,我将mysql服务正常启动,但是依旧无法创建表
此时查看进程,没发现异常
然后查看innodb的事务表 innodb_trx:
连着查询了几次,trx_rows_modified的值没有发生变化,初步判断是上次mysql实例异常crash后出现了问题。
从performance_schema.data_locks中可以看到锁的都是系统的表。
修改配置文件,然后重启mysqld服务
相关:https://blog.csdn.net/u010520724/article/details/117559856
https://blog.csdn.net/m0_37827567/article/details/82979767
https://blog.csdn.net/zhang123456456/article/details/72854467
标签:回滚,MySQL,innodb,mysql,进程,kill,报错,killed From: https://www.cnblogs.com/harda/p/16986530.html