前戏

存储引擎层:

简单来说,就是数据的存储方式。在MySQL中,我们可以使用`show engines`查看当前数据库版本支持哪些引擎,常见的数据存储引擎:InnoDB、MyISAM、NDB…

常见面试题:

请简述MySQL的MyISAM引擎与InnoDB引擎的区别

  1. MyISAM引擎:擅长数据的查询,支持全文索引
  2. InnoDB引擎:Supports transactions, row-level locking, and foreign keys,支持事务处理、行级锁、支持外键。

存储层(数据文件是如何进行存储的)

问题:存储引擎到底是如何保存数据文件的?

create database db_itheima default charset=utf8;

当数据库创建完后可以看到/data/文件夹

存储引擎层(MyISAM与InnoDB引擎)_数据文件

mysql5的版本会在db_itheima文件夹中还有一个文件​​db.opt​​,存放内容为数据库的编码格式。这里是用mysql8.0

MyISAM引擎

mysql> use db_itheima;
Database changed
mysql> create table tb_user(id int, name char(1)) engine=myisam default charset=utf8;

存储引擎层(MyISAM与InnoDB引擎)_数据文件_02

​*.frm :框架文件,定义数据表结构

*.MYI :INDEX索引,主要用于存放索引文件

*.MYD:数据文件

InnoDB引擎

mysql> use db_itheima1

Database changed

mysql> create table tb_user(id int, name char(1)) engine=innodb default charset=utf8;

存储引擎层(MyISAM与InnoDB引擎)_数据文件_03

*.ibd:索引文件+数据文件

其实InnoDB引擎不仅仅会产生以上文件,其在外部data目录中也会产生一个文件(确切来说不能叫做产生文件,而应该叫做共享文件)

存储引擎层(MyISAM与InnoDB引擎)_数据文件_04

​所以由此可知,InnoDB引擎的数据备份不能简简单单的通过拷贝方式实现,必须使用专业的备份工具。

注:mysql8.0以及不支持MyISAM引擎了