使用rm -f ib* 删除数据文件和重做日志文件,此时mysql数据库还是可以继续工作,数据可以写入,此时千万不能把mysqld进程杀死,否则无法挽救.
先找到mysqld的进程pid netstat -ntlp | grep mysqld
查看结果 ll /proc/进程id/fd | egrep 'ib_|ibdata' ,查看10,11,4,9为要恢复的文件
关闭业务, flush tables with read lock; 让数据库只读,以便完成恢复工作
检验只读是否成功 ,让脏页尽快刷入到磁盘中 set global innodb_max_dirty_pages_pct=0;
查看binlog日志写入情况确保file和position的值没有在变化 show master status;
在查看innodb状态信息,确保脏页已经刷入磁盘 show engine innodb status\G
查看状态确保一些值是正确的
查看transactions 确保后台purge进程把undo log全部清理掉,事务id 要一致
查看insert buffer and adaptive hash index 合并插入缓存等于1
查看log 确保log sequence…,log flushed…,log checkpoint… 这三个值不在变化
查看buffer pool and memory 确保脏页数据为0
查看row operations 确保插入更新删除为0
恢复数据,把之前看到的几个文件cp到原来的目录下
修改用户属性 chown mysql:mysql ib*
重启mysql测试 (千万不要在生产环境测试)