假设执行了误删除操作,又是线上业务,先安心,mysql没有重启之前不会影响现有操作,mysqld在运行状态中,会保持这些文件为打开状态,即使把它们删除了,它们仍旧存在于文件系统中,mysqld仍然可以对其进行读写。

恢复 第一步:查看mysqld的进程id 可以top或者ps-ef|grep mysql都可以,每个进程在/proc/进程号下都有文件夹,假设mysql的进程号是14101 命令:ls -la /proc/14101/fd/ | grep -e ibdata -e ib_

第二步:停止mysql的一切业务 为了保证文件正常和数据一致,需要停止你们的线上业务,注意是mysql读写的业务,不是关闭mysql,然后等待mysql将之前的操作全部写入记录到磁盘。 命令(mysql里面执行):SHOW engine innodb STATUS
checkpoint age 就是 Log sequence number的值减去 Last checkpoint at的值, 如果为0,那么表示所有的page都flush到硬盘文件中了,确保线程不再执行任何操作

第三步、复制文件 cp /proc/14101/fd/3 /var/lib/mysql/ibdata1 cp /proc/14101/fd/8 /var/lib/mysql/ib_logfile0 cp /proc/14101/fd/9 /var/lib/mysql/ib_logfile1

第四步、授权重启 chown -R mysql:mysql ib* systemctl restart mysqld

注意:本人并没有实践过,只是在网上搜索文章得时候看到了别人得博文,觉得线上可能会碰到这种问题,就跟着整理下。