查看MySQL数据的存储位置
MySQL的默认存储引擎InnoDB是把数据存储在磁盘中,而操作系统是通过文件系统对磁盘进行管理的,那么怎么看MySQL具体把数据放在文件系统哪个位置呢?
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
执行上述命令用来查看MySQL存放数据的目录,可以看出,MySQL把数据存放在了/var/lib/mysql路径下, 切换到这个路径,我们看下这个路径下都有哪些文件和目录
数据目录的结构
[root@mac mysql]# ls -al
总用量 188520
drwxr-x--x 13 mysql mysql 4096 4月 9 06:12 .
drwxr-xr-x. 44 root root 4096 12月 3 2019 ..
-rw-r----- 1 mysql mysql 56 7月 22 2019 auto.cnf
-rw------- 1 mysql mysql 1679 7月 22 2019 ca-key.pem
-rw-r--r-- 1 mysql mysql 1107 7月 22 2019 ca.pem
-rw-r--r-- 1 mysql mysql 1107 7月 22 2019 client-cert.pem
-rw------- 1 mysql mysql 1679 7月 22 2019 client-key.pem
drwxr-x--- 2 mysql mysql 4096 5月 7 08:02 food
-rw-r----- 1 mysql mysql 2490 12月 5 14:06 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 5月 6 23:55 ibdata1
-rw-r----- 1 mysql mysql 50331648 5月 6 23:55 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 7月 22 2019 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 5月 7 05:34 ibtmp1
drwxr-x--- 2 mysql mysql 4096 7月 22 2019 mysql
srwxrwxrwx 1 mysql mysql 0 12月 5 14:06 mysql.sock
-rw------- 1 mysql mysql 5 12月 5 14:06 mysql.sock.lock
drwxr-x--- 2 mysql mysql 4096 6月 10 2020 order_food
drwxr-x--- 2 mysql mysql 4096 7月 22 2019 performance_schema
-rw------- 1 mysql mysql 1679 7月 22 2019 private_key.pem
-rw-r--r-- 1 mysql mysql 451 7月 22 2019 public_key.pem
drwxr-x--- 2 mysql mysql 4096 10月 13 2019 sell
-rw-r--r-- 1 mysql mysql 1107 7月 22 2019 server-cert.pem
-rw------- 1 mysql mysql 1675 7月 22 2019 server-key.pem
drwxr-x--- 2 mysql mysql 12288 7月 22 2019 sys
数据库在文件目录中的表示
上图就是/var/lib/mysql目录下的内容,其中d开头的表示目录,这些目录正好对应MySQL里的一个个数据库,例如food目录就对应着MySQL中的food数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| food |
| mysql |
| order_food |
| performance_schema |
| sell |
| sys |
+--------------------+
7 rows in set (0.00 sec)
需要注意的是,其中有一个例外,系统数据库information_schema并没有在数据目录下
下面具体到food目录下看看都有什么内容
[root@gxbrc mysql]# ls -al food/
总用量 3124
drwxr-x--- 2 mysql mysql 4096 5月 7 08:02 .
drwxr-x--x 13 mysql mysql 4096 4月 9 06:12 ..
-rw-r----- 1 mysql mysql 8812 10月 28 2019 comment.frm
-rw-r----- 1 mysql mysql 98304 10月 28 2019 comment.ibd
-rw-r----- 1 mysql mysql 67 10月 13 2019 db.opt
-rw-r----- 1 mysql mysql 8774 5月 31 2020 employees.frm
-rw-r----- 1 mysql mysql 98304 5月 31 2020 employees.ibd
-rw-r----- 1 mysql mysql 13152 2月 14 2020 order_detail.frm
-rw-r----- 1 mysql mysql 147456 11月 30 23:29 order_detail.ibd
-rw-r----- 1 mysql mysql 13584 11月 14 2019 order_main.frm
-rw-r----- 1 mysql mysql 114688 11月 30 23:29 order_main.ibd
-rw-r----- 1 mysql mysql 13502 10月 28 2019 order_tab.frm
-rw-r----- 1 mysql mysql 98304 10月 28 2019 order_tab.ibd
-rw-r----- 1 mysql mysql 8711 10月 28 2019 pic_tab.frm
-rw-r----- 1 mysql mysql 98304 10月 28 2019 pic_tab.ibd
-rw-r----- 1 mysql mysql 8698 10月 13 2019 picture.frm
-rw-r----- 1 mysql mysql 98304 10月 13 2019 picture.ibd
food目录下存放的文件主要是用来描述food数据库下的表的信息,而数据库下的表一般主要分为以下两个部分:
1). 表的结构信息
2). 表的数据信息
可以看到food目录下除去有一个db.opt文件,其他的都是*.frm 和 *.ibd结尾的文件,下面我们具体介绍一下他们的作用
db.opt
查看一下db.opt文件,可以看到db.opt主要用来描述数据库的字符集和比较规则
[root@mac food]# cat db.opt
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci
*.frm
*.frm主要用来描述数据库中表的结构信息,例如包含哪些列,字段类型是什么,以及外键的约束条件,索引和数据库使用的存储引擎等信息;需要注意的是,frm文件是二进制文件,我们直接通过cat或者vim来查看会发现是乱码
*.ibd
*.ibd主要用来存放InnoDB的数据