1. 数据库
数据库(数据库文件)是一个或者一组二进制文件,通常来说存在与文件系统之上。
2. 数据库实例
由数据库后台进程/线程以及一个共享区域组成(程序的概念),数据库实例是用来操作数据库文件的
注意:MySQL中,数据库实例和数据库是一一对应的。没有Oracle的一对多(RAC)的机制。
3. MySQL体系结构
-
单进程多线程结构
- 不会影响MySQL的性能,看程序如何写。(多进程程序,进程间通信开销大于多线程)
-
存储引擎的概念
- 可以理解成文件系统,例如FAT32, NTFS, EXT4。 一个表是一个分区,引擎就是分区的文件系统
存储引擎的对象就是表
- show tables; 可以看到每个表对应的是上面引擎(Engine)
- 除了特殊情况,我们现在就只考虑
INNODB
-
体系结构图
4. 逻辑存储结构
MySQL逻辑存储结构 |
---|
instance |
database |
schema |
table |
view |
- 一个DB对应一个schema
- 一个DB对应一个文件夹
- 一个表对应一组文件
|--> table1 --- | view1 |
MySQL Instance -----> Database ----> Schema ---> |--> table2 --- | view2 |
|--> table3 --- | View3 |
注意:
MySQL中一个Database
对应一个Schema
,之所以要有这个schema
, 是为了兼容其他数据库
information_schema
数据库不是文件夹,存在于内存中,在启动时创建
5. MySQL物理存储结构
- MySQL配置文件
datadir
- 存储数据二进制文件的路径
-
表结构的组成
-
frm:表结构定义文件
-
MYI:索引文件
-
MYD:数据文件
-
可以用
hexdump -c XXX.frm
查看二进制文件(意义不大) -
show create table tablename;
-
mysqlfrm (utilities工具包)
shell> mysqlfrm --diagnostic /data/mysql_data/aaa/.a.frm #可将frm文件转成create table的语句
-
-
错误日志文件
log_err
- 建议配置成统一的名字- 方便定位错误
- 慢查询日志文件
- 将运行超过某一个时间
阈
(yu四声)值
的SQL语句记录到文件
- MySQL < 5.1 :以秒为单位
- MySQL >= 5.1 : 以毫秒为单位
- MySQL >= 5.5 : 可以将慢查询日志记录到表
- MySQL >= 5.6 : 以更细的粒度记录慢查询
- MySQL >= 5.7 : 增加timestamps支持 slow_query_log_file
- 建议配置成统一的名字- 用于优化查询