mysql误删除ibdata1以及日志ib_logfile*

假设执行了误删除操作,又是线上业务,先安心,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

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

猜你喜欢

转载自blog.51cto.com/huangmoumou/2336036