这里恢复的数据库是原MYSQL数据库已经无法启动,只有MYSQL数据库的data目录,并且是MyISAM引擎的数据库。在重新安装的MYSQL数据库中恢复数据库。
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吧:(此处新建空数据库应该是新建与需要恢复的数据库同名数据库,如果是用文中新建的testdb数据库会出现错误。)
create database testdb;
四:建好表之后,mysql数据库目录下会出现testdb目录,把所有你要恢复的表的.MYD和.MYI文件拷贝到这个目录中。
五:登录mysql,运行以下恢复语句:
import table from '/private/var/tmp/testdb/*.sdi';
如果一切正常,表应该已经恢复了。如果恢复失败检查是否NYSQL版本是否一样。
原文地址:https://xiebruce.top/689.html