背景:
班上忙着干活呢,任务都着急~~~
突然听见年轻同事轻声喊我:xx,我不小心执行了rm /命令;我听到这句话,脑袋都没反应过来,还能有这神操作......
没办法,开搞吧(数据无价呀)
幸亏同事保留了现场,没有关闭唯一一个可远程的窗口(后面唯一拯救的希望,所以任何时候不要破坏第一现场)。
查看现场环境:
1.ll /查看系统文件目录,发现少了/etc文件夹,其他不清楚;
2.网内其他电脑能ping通,但是不能使用ssh进行远程(也就意味着不能使用scp),进行远程时提示:kex_exchange_identification: read: Connection reset;
3.使用显示器直连服务器后,登录界面无任何反应;
第一步:备份数据库和软件系统配置;
第二步:还原数据库;
备份文件操作(如果没有这一步,也就没有后面的):
找U盘,通过可远程的命令窗口,将U盘挂载到服务器上,备份/var/lib/mysql/数据库文件到U盘上。(U盘记得要fat32格式的。挂载步骤是
1.查看U盘fdisk -l;
2.建文件夹mkdir /mnt/usb;
3.挂载mount /mnt/usb/ /dev/sdd1。)
恢复数据库(挺坎坷的(哭一下),毕竟之前我也没有接触过mysql)
(特别感谢分部同事,无意间两句话解开我困惑的思维:mysql有不同的数据库驱动类型)
备份出来的数据库文件中有两类文件:.ibd和.myi .myd
.ibd的数据库驱动类型是InnoDB的;
.myi .myd的数据库驱动类型是MyISAM的;
针对不同驱动要有不同的恢复操作。(幸亏只有两种......哈哈哈)
首先,在别的服务器上重新安装mysql数据库;(安装过程很简单不重复)
然后,将数据库备份文件拷贝到/var/lib/mysql下;(拷贝完成后,记得更改文件的用户和用户组哦)
恢复.ibd对应的表:
1.将xxx.ibd备份为xxx1.ibd;
2.使用dbeaver工具连接数据库;
3.执行创建表名xxx的脚本;(研发人员手里肯定有,要过来)
4.在SQL查询里执行:ALTER TABLE 表名xxx DISCARD TABLESPACE;
5.将xxx1.ibd改回xxx.ibd;
6.在SQL查询里执行:ALTER TABLE 表名xxx IMPORT TABLESPACE;
OK,数据就恢复了,在查询工具中就能显示数据啦~~~
每一个.ibd对应一个表名,有多少个.ibd对应多少个表,每个表按照上面步骤进行恢复即可。
恢复.myi .myd对应的表:
1.将xxx.frm、xxx.myi、xxx.myd备份为xxx1.frm、xxx1.myi、xxx1.myd;
2.使用dbeaver工具连接数据库;
3.执行创建表名xxx的脚本;
4.手动删除新生成的xxx.frm、xxx.myi、xxx.myd;
5.将xxx1.frm、xxx1.myi、xxx1.myd备份为xxx.frm、xxx.myi、xxx.myd;
OK,数据就恢复了,在查询工具中就能显示数据啦~~~
每三个文件xxx.frm、xxx.myi、xxx.myd(
- .frm 表结构文件
- .myd 表数据文件
- .myi 表索引文件
)对应一个表名xxx,每个表按照上面步骤进行恢复即可。
野路子,文中有不妥之处,请见谅~~~
欢迎大神指导交流!!!