一、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