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)
存放索引信息文件
-
-