MySQL8中的存储引擎以及文件解析
作者: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)
- 存放索引信息文件
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。