1、OS层获取内存中的数据

当前实例没有关闭的情况下,查看实例pid。

[root@admin-db62 test]# ps aux | grep 3303
root     21952  0.0  0.0 113304  1648 ?        S    11:47   0:00 /bin/sh /mysql/multi/3303/private/bin/mysqld_safe --defaults-file=/mysql/multi/3303/etc/my.cnf
mysql    23356  0.2  1.1 19529408 1568416 ?    Sl   11:47   0:04 /mysql/multi/3303/private/bin/mysqld --defaults-file=/mysql/multi/3303/etc/my.cnf --basedir=/mysql/multi/3303/private --datadir=/mysql/multi/3303/data --plugin-dir=/mysql/multi/3303/private/lib/plugin --user=mysql --log-error=/mysql/multi/3303/log/mysql-error.log --open-files-limit=65535 --pid-file=/mysql/multi/3303/pid/mysql.pid --socket=/mysql/multi/3303/socket/mysql.sock --port=3303
[root@admin-db62 fd]# cd /proc/23356/fd
[root@admin-db62 fd]# ll
lrwx------ 1 root root 64 Nov 22 11:52 39 -> /mysql/multi/3303/data/mysql/time_zone.ibdlrwx------ 1 root root 64 Nov 22 11:52 4 -> /mysql/multi/3303/data/ib_logfile0lrwx------ 1 root root 64 Nov 22 11:52 40 -> /mysql/multi/3303/data/mysql/time_zone_transition.ibdlrwx------ 1 root root 64 Nov 22 11:52 42 -> /mysql/multi/3303/data/test/t1.ibd (deleted) 

通过上述操作我们发现,被我们干掉的数据文件显示状态为”deleted“,被删除。

2、恢复处理操作

为保护好当前服务器现场、在另一台服务器上开始恢复数据。

#目标端
[root@admin-db64 3306]# nc -l 13306 > /mysql/multi/3306/data/t1.ibd  #db64这台服务器上,3306实例中来恢复上述被删除的数据。/mysql/mysql/multi/3306/data为临时存放数据目录

#远端
lrwx------ 1 root root 64 Nov 22 11:52 42 -> /mysql/multi/3303/data/test/t1.ibd (deleted)
[root@admin-db62 fd]# cat 42 | nc 10.26.65.74 13306

#如上操作,将在OS层,内存里的数据拷贝并传输至远程恢复服务器上。

【注意】不要在本机进行恢复、保留线上环境,避免二次伤害。

3、恢复数据处理

在源端服务器进行数据恢复操作。

[root@admin-db64 3306]# nc -l 13306 > /mysql/multi/3306/data/t1.ibd
[root@admin-db64 3306]# cd data/
[root@admin-db64 data]# ll
total 100
-rw-r----- 1 mysql mysql    67 Nov 22 12:36 db.opt-rw-r--r-- 1 root  root  98304 Nov 22 12:37 t1.ibd
[root@admin-db64 data]# chown -R mysql.mysql t1.ibd   #更改属主

登录源端进行恢复实例操作:

mysql > use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)
 
#1、根据表结构创建表(不要告诉我表结构也已经没有了...)
CREATE TABLE `t1` (                             
  `id` int(11) DEFAULT NULL                               
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

#2、discard 表空间
mysql> alter table t1 discard tablespace;
Query OK, 0 rows affected, 1 warning (0.01 sec)

#3、将上面准备好的数据文件放入正确目录
[root@admin-db64 data]#mv  t1.ibd  test/

#4、import 表空间
mysql> alter table t1 import  tablespace;
Query OK, 0 rows affected, 1 warning (0.01 sec)

#5、查看数据是否可以正常查看
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)

通过上述步骤的操作,发现数据已经可以正常查看,后面只需要将其备份出来,恢复到待恢复实例即可。此处不再赘述。