MySQL 的数据目录
MySQL 使用SQL
语句对数据的操作,其实是它对于操作系统的文件系统操作的抽象,今天内容比较轻松,让我们一起来看一下一些重要的文件
和文件夹
:
首先,你得知道,你 MySQL 的数据目录在哪里,执行下列语句:
show variables like 'datadir';
这是我的路径:
/var/lib/mysql/
因为我的 MySQL 服务运行在Linux
上。
我们创建一个数据库的时候,会发生什么呢?
MySQL 会在对应的数据目录下,建立一个同名的文件夹,在这个文件夹里面,会创建一个db.opt
,存储该库的元数据信息。
好了,我们知道一个库
对应着一个文件夹
了,那表
呢?
你肯定也猜到了,那就是文件
。
我们每创建一个表,都会在对应的库文件
中创建两个文件:
- 表结构描述文件,以
.frm
结尾(二进制格式存储的,直接打开会乱码) - 存储真实数据的文件,以
.ibd
结尾
Innodb 是如何存储数据的?
为了更高的管理页,设计师提出了表空间
这一概念,也可以叫做文件空间
,一张表
可以对应多个文件
。表空间
又有好几种不同的类型:
(1)系统表空间
MySQL 会默认在数据目录下创建一个名为ibdata1
的文件,大小为12MB
,可以可以自动扩展,作为系统表空间在文件系统上的表示。
当然,你也可以放在其他目录中,或者指定多个文件,了解一下即可。
注意:MySQL 5.5.7 到 MySQL 5.6.5 ,表中的数据都默认存储在这个系统空间中。
(2)独立表空间
MySQL 5.6.6 之后,每张表都有自己独立的表空间,在文件系统上就是一个又一个的.idb
文件,用于用户数据的存储。
当然,独立表空间和系统表空间中的数据可以相互转换,也可以指定默认的存放位置,了解一下即可,也没有必要这么做。
(3)其他类型的表空间
通用表空间、undo表空间、临时表空间等等。(后续会详细讲解的,用到了再学)
MyIsam 是如何存储表数据的?
MyIsam 没有表空间这么一种概念,一个数据库文件夹下就三个文件:
.frm
,表结构描述文件.MYD
,数据存储文件.MYI
,索引文件
其他文件
这些了解一下就好了,
服务器进程文件
每运行一个服务器程序,都会将对应的进程id写入该文件内
服务器日志文件
记录服务器的运行状态,包含一大堆不同类型的日志,后续会“唠叨”
SSL和RSA证书和密钥文件
客户端和服务端的通信安全,暂时忽略
文件系统对数据库的影响
数据库名和表名不得超过文件系统的最大限制
它们两个对应着
目录名称
和文件名称
,在不同的操作系统上,有不同的大小限制。比如,我的服务器是
Centos 7.6
,通过以下命令进行查看:getconf NAME_MAX /usr // 输入的结果是:255
特殊字符的限制
如果遇到操作系统不支持的字符,则会乱码。为了避免这种现象,MySQL 对于库名或者说表名字符不是
数字
或者拉丁字母
的,都会进行转码。单个文件大小限制
基本上都是
TB
级别的,怎么能让一个表文件达到那个量级呢?
MySQL 系统数据库简介
mysql
非常重要,存储着账户和权限信息、存储过程和事件定义信息,运行过程中的日志信息等。
information_schema
存储着其他数据库表的元信息。
performance_schema
存储 MySQL 在运行时的状态信息,算是一个对 MySQL 的性能监控。
sys
通过视图的形式将
information_schema
和performance_schema
结合起来,方便开发人员了解 MySQL 服务性能。
总结
本章内容其实随便过一下,有个概念就行了。
2025/01/31
writeBy kaiven