数据库文件
MySQL的每个数据库都对应存放在一个与数据库同名的文件夹中,这些文件包括MySQL所建数据库文件和,MySQL所用存储引擎创建的数据库文件
MySQL创建并管理的文件
.fmt文件
:存储数据表的框架结构,文件名与表名相同,与操作系统和存储引擎无关
MySQL所用的存储引擎创建的数据库文件
(在MySQL版本<8.0时).frm
文件是必要的
根据MySQL所使用的存储引擎的不同,存储引擎会创建各自不同的数据库文件(MySQL常用的两个存储引擎是MyISAM和InnoDB)
MyISAM
.MYD文件
:即My Data,表数据文件
.MYI文件
:即My Index,索引文件
.sdi文件
:是一个json文件,记录描述了表空间中包含的表和表空间对象
InnoDB
InnoDB采用表空间来管理数据,存储表数据和索引
ibdata[x]
:系统表文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用
.ibd文件
:单表表空间文件,每个表使用一个表空间文件,存放用户数据库表数据和索引
ib_logfile[x]
:日志文件
表空间
MySQL总共有六种表空间:系统表空间(也叫共享表空间)、独立表空间、临时表空间、undo表空间、通用表空间、传输表空间
系统表空间
在上图System
Tablespace处,在文件中的体现是ibdata
文件,在初始化mysql实例的时候就会生成,可能有ibdata1,ibdata2...,当系统表空间不够用时,它会自动扩展,扩展不是重新生成一个文件ibdata2,而是在ibdata1的基础上扩容
系统表空间不能在线进行更改,只能在配置文件(my.cnf)中修改参数后,重启mysql实例
独立表空间
在上图File-Per-Table Tablespace处,即一个表一个文件,将表数据分开存放后,损坏一个文件不至于影响所有表;容易维护,查询速度快
恢复MyISAM引擎驱动的表
MySQL版本<8.0时
只要有.frm
,.MYD
,.MYI
文件存在,直接复制到MySQL的数据目录中,MySQL就可以读取到这张表了
MySQL版本>=8.0时
指定MySQL的安全目录secure_file_priv
然后能在MySQL中
show variables like 'secure_file_priv'
即可
然后将所要恢复的表的.sdi
文件拷贝的secure_file_priv
指定的目录下,新建一个空数据库testdb
,建好数据库后,MySQL数据库目录下会出现testdb
文件夹,将所有要恢复的表的.MYD
和.MYI
文件拷贝到这个目录中
最后在MySQL中执行
import table from '[secure_file_priv指向的目录]/*.sdi'
就可以恢复表了