mysql ibdata1 恢复_mysql误删ibdata1,还未重启时的恢复办法

一、mysql运行中,删除ibdata1文件

[root@orderer data]# rm -rf ibdata1

[root@orderer data]#rm -rf ib_logfile0

[root@orderer data]#rm -rf ib_logfile1

[root@orderer data]#

[root@orderer data]# ll??? 12436

-rw-r----- 1 mysql mysql 56 1? 20 09:13auto.cnf-rw------- 1 mysql mysql 1680 1? 20 09:13 ca-key.pem-rw-r--r-- 1 mysql mysql 1112 1? 20 09:13ca.pem-rw-r--r-- 1 mysql mysql 1112 1? 20 09:13 client-cert.pem-rw------- 1 mysql mysql 1676 1? 20 09:13 client-key.pem-rw-r----- 1 mysql mysql 220 1? 20 11:39ib_buffer_pool-rw-r----- 1 mysql mysql 12582912 1? 20 11:40 ibtmp1

二、这种情况下,mysql还能正常运行,在这种状态下,我们可以从proc目录下对应的文件夹恢复这三个文件

查看当前mysqld服务的进程号

[root@orderer data]# ps -ef|grepmysqld

root10696 3934 0 11:40 pts/3 00:00:00 /bin/sh /home/mysql-5.7.26/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf

mysql10855 10696 0 11:40 pts/3 00:00:01 /home/mysql-5.7.26/bin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/home/mysql-5.7.26 --datadir=/home/mysql-5.7.26/data --plugin-dir=/home/mysql-5.7.26/lib/plugin --user=mysql --log-error=/home/mysql-5.7.26/log/mysqld.log --pid-file=/home/mysql-5.7.26/run/mysqld.pid --socket=/home/mysql-5.7.26/mysql.sock

root12705 10188 0 11:58 pts/5 00:00:00 grep --color=auto mysqld

[root@orderer data]#

当前进程号位10855,再执行如下命令查看ibdata 和ib_log相关文件

[root@orderer fd]# cd /proc/10855/fd

[root@orderer fd]# ll|grep -e ibdata -e ib_

lrwx------ 1 root root 64 1? 20 11:42 10 -> /home/mysql-5.7.26/data/ibdata1 (deleted)

lrwx------ 1 root root 64 1? 20 11:42 4 -> /home/mysql-5.7.26/data/ib_logfile0 (deleted)

lrwx------ 1 root root 64 1? 20 11:42 9 -> /home/mysql-5.7.26/data/ib_logfile1 (deleted)

可以看到这3个文件被标记了deleted,只要mysql服务部停止,proc下面就存在这3个文件

但是不能直接把文件复制过去,这样会造成数据文件损坏,我们必须保证所有buffer pool中的数据修改都保存到了硬盘文件上面, 为此,首先要停止更多的写入/更新/删除操作,然后等待innodb flush pages to disk. 停止写入的话,可以把网站应用关闭,或者lock tables: 通过锁表停止写入:

mysql>flush tables with read lock;

Query OK,0 rows affected (0.00sec)

mysq

你可能感兴趣的:(mysql,ibdata1,恢复)