Mysql8.0 MyISAM引擎使用.sdi/.MYD/.MYI文件恢复数据
mysql8.0以前MyISAM引擎的表是由以下三个文件组成的:
XXX.FRM 表结构文件
XXX.MYD 数据文件
XXX.MYI 索引文件
只要一张表的这三个文件存在,直接复制到msql的数据目录中,mysql是可以直接读取到这张表的,但是到了8.0,.FRM
文件变成了.sdi
文件,这种方法已经无法恢复数据了。
使用.sdi/.MYD/.MYI文件恢复数据
修改mysql配置文件,添加以下配置,意思是指定一个安全目录,注意这个目录必须事先建好,否则重启mysql会报错,另外为防止权限问题,最好把该目录权限设置为777:
secure_file_priv=/private/var/tmp/testdb
重启mysql,登录mysql,执行以下命令:
show variables like 'secure_file_priv';
如果显示secure_file_priv的值为/private/var/tmp/testdb(即前面设置的目录),那就说明设置成功了,如下图(如果没设置,这个值应该是NULL):
把所有你要恢复的表的.sdi
文件拷贝到/var/tmp/testdb
待用,注意只拷贝.sdi
文件即可,.MYD
和.MYI
文件不用拷贝。
新建一个空数据库,我就叫它testdb
吧:
create database testdb;
建好表之后,mysql数据库目录下会出现testdb
目录,把所有你要恢复的表的.MYD
和.MYI
文件拷贝到这个目录中。
登录mysql,运行以下恢复语句:
import table from '/private/var/tmp/testdb/*.sdi';
如果一切正常,表应该已经恢复了,像我这样就是因为数据库版本不对无法恢复(因为我是帮别人恢复,刚好手头的数据库版本比它的高一个版本):
如果你们也遇到了数据库版本对不上,那只能自己去安装对应的数据库版本再来恢复了。
官方文档:IMPORT TABLE Syntax
觉得文章对你有用的话鼓励一下我吧