环境: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 这个表太大 能不采用那种方法就不用那种方法