1、MyISAM下创建数据库表
use choose;
set default_storage_engine=MyISAM
create table my_table(
today datetime,
name char(20)
);
执行完上面的代码,会在choose数据库目录文件下,创建四个文件:
- db.opt -----> 主要记录当前数据库的默认字符集及字符序等信息
- my_table.frm -----> 表结构定义文件
- my_table.MYD -----> 用于存放数据
- my_table.MYI -----> 用于存放索引
备份操作:
只需要将整个数据库目录(choose目录)复制一份即可
备份前需要用“ flush tables with read lock ;[禁止了所有数据库表的更新操作,但是无法禁止数据库表的查询操作] ” 将服务器内的数据刷新到数据库文件中,同时锁定所有的表,以保证期间不会有数据写入
备份后需要用“ unclock tables ; ” 进行解锁,MySQL服务实例即可以重新提供数据更新服务】
解释一个现象:
产生延迟的原因:
记录首先在MySQL服务器的内存中产生(23:30:28),然后写入到外存硬盘的MYD数据文件中(23:30:29),最后再将索引信息写入到MYI索引文件中(23:33:01)。所以产生时间延迟的主要原因在于缓存,通过缓存可以有效减少I/O请求次数,提高数据访问效率
2、InnoDB下创建数据库表
use choose;
set default_storage_engine=InnoDB
create table my_table(
today datetime,
name char(20)
);
执行完上面的代码,会在choose数据库目录文件下,创建两个文件:
- db.opt -----> 主要记录当前数据库的默认字符集及字符序等信息
- my_table.frm -----> 表结构定义文件
存储引擎由MyISAM修改为InnoDB,
my_table表的 MYD数据文件 和 MYI索引文件 消失,
实际上是数据与索引信息被写入到了 数据库根目录下ibdata1(choose数据库目录的上一层) 文件中
- ibdata1 -----> 既保持数据信息又保存索引信息【ibdata1文件是InnoDB的共享空间文件】
- ib_logfile1 和 ib_logfile0 -----> 重做日志文件,记录全部完成的事务,即执行了commit的事务
备份操作:
不仅需要将整个数据库目录(choose目录)复制,还需要复制ibdata1表空间文件,以及重做日志文件ib_logfile1 和 ib_logfile0
解释一个现象:
产生延迟的原因:
记录首先在MySQL服务器的内存中产生(00:21:34),然后写入到外存硬盘的共享表空间文件ibdata1中(00:21:35),最后再将重做日志信息写入到重做日志文件ib_logfile0中(00:21:36)
扩展:InnoDB表空间
1、共享表空间:
- 作用:MySQL服务实例承载的所有数据库的所有InnoDB表的数据信息、索引信息、各种数据信息以及事物的回滚信息,全部存放在共享表空间文件中
- 位置:位于数据库根目录
- 文件名:ibdata1
- 大小:默认初始大小10M
- 可以使用“ show variables like ‘innodb_data_file_path’; ”来查看该文件的属性
2、独享表空间
如果将全局系统变量innodb_file_per_table的值设置为 NO 开启(默认为OFF),那么之后创建InnoDB存储引擎的新表时,这些表的数据信息、索引信息将保存到独享表空间文件中
- 作用:存放表的数据信息、索引信息、各种数据信息以及事物的回滚等信息
- 位置:位于数据库目录下
- 文件名:表名.ibd
【注意】:任何InnoDB表的元数据信息都必须要存储在共享表空间中,所以共享表空间必须存在,即便将全局系统变量innodb_file_per_table的值设置为 NO 开启