一、背景
个人笔记本电脑主板挂了拿去维修了,手头就一个固态盘。因项目需要,不得不还原数据库到个人云主机(CentOS)。由于没有数据库管理软件,所以只能使用固态盘中mysql的数据目录下的数据文件完成数据还原。
二、操作过程
1、备份目标主机mysql中的数据库!备份目标主机mysql中的数据库!备份目标主机mysql中的数据库!重要的事情说三遍,不管大佬多么牛,备份一下还是很有必要的!
2、从固态盘中找到mysql数据目录,并将目录下所需数据库对应的文件夹及ibdata1文件一并拷贝至目标主机下mysql数据目录,可通过如下sql查询:
show global variables like "%datadir%";
由于ibdata1在目标主机的mysql数据目录下本来就有,所以在拷贝或者解压(如果是放在压缩包中搞进去的)的时候都会给个提示,如果在做了第一步备份的前提下,可以选择覆盖或者替换。
需要注意的是,如果没有将ibdata1拷贝过去,在执行第4步,完成mysql重启后,进入还原后的数据库,打开表的时候会报如下错误:
1146 - Table 'space.xxxx表' doesn't exist
3、修改拷贝过来的文件的拥有者跟用户组
chown -R mysql 数据库目录
chgrp -R mysql 数据库目录
chown -R mysql ibdata1文件
chgrp -R mysql ibdata1文件
此时,先去数据库连接工具中去看看,其他的数据库是否还能正常访问。如果还能访问,那么还能在此时备份数据。
4、重启mysql
systemctl restart mysqld
5、使用数据库连接工具(本人使用的Navicat)连接数据库进行检查,此时被还原的数据库已经可以正常访问了。但是!!!其他的数据库访问的时候出现了以下报错:
[Err] 1813 - Tablespace xxxx exists.
[Err] Failed to create Table: xxxxv
如果已经执行过备份操作,那么可以不用慌,可以按照第6步的操作方式进行处理。
6、处理问题
首先,去目标主机的mysql数据库数据目录下找到报错的数据库对应的目录,删除目录下所有的.idb文件。
rm -rf ./*.idb
其次,使用数据库备份文件还原对应的数据库。最后验证发现已经还原到之前的状态了!
三、总结
至此,本次通过mysql数据库文件还原数据库的过程就操作完成了。形成此文档的目的,一方面是为了便于后期遇到同样的问题时有个参考,另一方面也希望能够帮助的跟我遇到同样问题的小伙伴。以上操作是本人实操记录,如有不到位的地方,欢迎各位大佬批评指正!