关于mysql做完大transaction

环境:mysql 5.7 linux 7 256内存 32核 

前景交代 

做了一个select 大约5亿条记录  之后做了delete  all  删除到一半的时候发现不对 取消掉 rollback 

按照道理 安静等待mysql 的回滚就能恢复数据  

从28号开始回滚到29号 都没结束这个事物

感觉不太对   

然后进mysql.information_schema.INNODB_TRX

 

 

奇怪的是在mysql.information_schema.INNODB_LOCKS    INNODB_LOCK_WAITS 这两张表 并没有数据返回

show engine innodb status 发现也是这个事物  

直接执行 systemctl restart mysqld (一直tail着mysql的err日志)

等待5分钟 根本shutdown 不下来 全部失败 这个看ps -ef|grep mysqld  发现还是存活的状态 登录mysql 发现有已经登录不上了socket 已经掉了  

 

决定kill 这个进成    先kill mysqld_safe  在kill mysqld   

等全部进程kill 完毕  启动mysql  开始innodb_recover 

start mysql 那个脚本启动file 不用担心 这个是脚本启动超时 进程依旧存在 

等到mysqld ready   kill掉mysql 重启 就可以了 

完事show processlist 看看kill 进程还是否存在 存在的话就kill 掉 

 

其实可以采用更加方便的(如果表小的话 表小 表小 表下) innodb_force_recover=3 不让它回滚undo 然后做mysqldump 这个表太大 能不采用那种方法就不用那种方法  

 

你可能感兴趣的:(关于mysql做完大transaction)