MySQL8中的存储引擎以及文件解析

 更新时间:2023年09月05日 09:09:46   作者:wangJiaLun-china  
这篇文章主要介绍了MySQL8中的存储引擎以及文件使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL存储引擎以及文件解析

服务器中的目录及文件

查看mysql的文件存储路径, 除了information_schema这个数据库之外,其他数据库都在当前目录存在文件夹

[root@MiWiFi-R3P-srv mysql]# pwd
/var/lib/mysql
[root@MiWiFi-R3P-srv mysql]# ll
总用量 188880
-rw-r-----. 1 mysql mysql       56 2月  14 21:09  auto.cnf
-rw-r-----. 1 mysql mysql     1954 3月  18 03:49  binlog.000003
-rw-r-----. 1 mysql mysql      179 3月  18 04:40  binlog.000004
-rw-r-----. 1 mysql mysql      156 3月  18 04:41  binlog.000005
-rw-r-----. 1 mysql mysql       48 3月  18 04:41  binlog.index
-rw-------. 1 mysql mysql     1680 2月  14 21:09  ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 2月  14 21:09  ca.pem
-rw-r--r--. 1 mysql mysql     1112 2月  14 21:09  client-cert.pem
-rw-------. 1 mysql mysql     1676 2月  14 21:09  client-key.pem
-rw-r-----. 1 mysql mysql   196608 3月  18 05:28 '#ib_16384_0.dblwr'
-rw-r-----. 1 mysql mysql  8585216 2月  14 21:09 '#ib_16384_1.dblwr'
-rw-r-----. 1 mysql mysql     3515 3月  18 04:40  ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 3月  18 05:26  ibdata1
-rw-r-----. 1 mysql mysql 50331648 3月  18 05:28  ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 2月  14 21:09  ib_logfile1
-rw-r-----. 1 mysql mysql 12582912 3月  18 04:41  ibtmp1
drwxr-x---. 2 mysql mysql      187 3月  18 04:41 '#innodb_temp'
drwxr-x---. 2 mysql mysql      143 2月  14 21:09  mysql
-rw-r-----. 1 mysql mysql 25165824 3月  18 05:26  mysql.ibd
srwxrwxrwx. 1 mysql mysql        0 3月  18 04:41  mysql.sock
-rw-------. 1 mysql mysql        5 3月  18 04:41  mysql.sock.lock
-rw-r--r--. 1 mysql mysql        7 2月  14 21:09  mysql_upgrade_info
srwxrwxrwx. 1 mysql mysql        0 3月  18 04:41  mysqlx.sock
-rw-------. 1 mysql mysql        6 3月  18 04:41  mysqlx.sock.lock
drwxr-x---. 2 mysql mysql     8192 2月  14 21:09  performance_schema
-rw-------. 1 mysql mysql     1680 2月  14 21:09  private_key.pem
-rw-r--r--. 1 mysql mysql      452 2月  14 21:09  public_key.pem
-rw-r--r--. 1 mysql mysql     1112 2月  14 21:09  server-cert.pem
-rw-------. 1 mysql mysql     1680 2月  14 21:09  server-key.pem
drwxr-x---. 2 mysql mysql       48 2月  21 21:15  sharding_order
drwxr-x---. 2 mysql mysql       28 2月  14 21:09  sys
-rw-r-----. 1 mysql mysql 16777216 3月  18 05:28  undo_001
-rw-r-----. 1 mysql mysql 16777216 3月  18 05:28  undo_002
drwxr-x---. 2 mysql mysql       22 2月  14 22:53  user_149

进入user_149数据库中查看每一个表对应有一个表示独立表空间 .ibd 结尾的文件进行存储

[root@MiWiFi-R3P-srv mysql]# cd user_149/
[root@MiWiFi-R3P-srv user_149]# ll
-rw-r-----. 1 mysql mysql 114688 3月  18 05:39 role.ibd
-rw-r-----. 1 mysql mysql 114688 2月  21 00:42 user.ibd

存储引擎

InnoDB存储引擎模式

表结构

  • 为了保存表结构,InnoDB在数据目录下对应的数据库子目录下
  • 创建了一个专门用于描述表结构的文件 表名.frm
  • ps: MySQL8.0中不存在表名.frm(表结构文件),并到了表名.ibd

表中数据和索引

  • 含MySQL 5.6.6之后版本中,InnoDB新建表不会默认存到系统表空间,默认使用独立表空间
  • 系统表空间(system tablespace)
  • 默认情况下,存放在 ibdata1 文件
  • 独立表空间(file-per-table tablespace)
  • 会在数据库子目录下创建表名.ibd的文件

配置

[server]
# 配置系统表空间对应文件路径以及大小,这个文件是自扩展文件。
innodb_data_file_path=data1:512M;data2:512M:autoextend
# 配置默认表空间 0:代表使用系统表空间; 1:代表使用独立表空间
innodb_file_per_table=0

MyISAM存储引擎模式

默认是使用InnoDB,需要创表时通过指定引擎

CREATE TABLE `user` (
	`id` INT NOT NULL AUTO_INCREMENT,
	`username` VARCHAR (255) COLLATE utf8mb4_german2_ci DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE = MYISAM DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_german2_ci;

表结构

  • MySQL5.7中和InnoDB一样,存储在表名.frm
  • MySQL8.0中存储在表名.xxx.sdi

表中数据和索引

  • MyISAM中索引都是二级索引数据和索引分开存放
  • 表名.MYD(MYData)
  • ​ 数据信息文件,存储数据信息
  • 表名.MYI(MYIndex)
  • ​ 存放索引信息文件

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论