上一小节,我们以一条查询语句的执行流程,系统了解了 MysqL 的逻辑架构。那么,MysqL 的物理组成是咋样的呢?本文继续从物理组成这个角度来介绍 MysqL,希望大家对 MysqL 的整体架构组成能有更全面的了解。
1.物理组成
1.1 日志文件
重要日志模块:二进制日志-binlog
binlog 的开启,通过在配置文件 my.cnf 中,显式指定参数 log-bin=file_name。如果未指定 file_name,则会记录为 MysqL-bin.******(* 代表 0~9 之间的某个数字,表示日志的序号)
root@localhost [tempdb]>insert into values();
Query OK, row affected ( sec)
[root@MysqL-test-1 log]# MysqLbinlog --base64-output=decode-rows -vv MysqL-bin.000017
#200413 0:18:17 server id 1873306 end_log_pos 556 Write_rows: table id 280 flags: STMT_END_F
### INSERT INTO `tempdb`.`a`
### SET
### @1=1 /* INT Meta=0 nullable=1 is_null=0 */
# at 556
#200413 0:18:17 server id 1873306 end_log_pos 583 Xid = 4713735
COMMIT/*!*/;
重要日志模块:InnoDB redo log
redo log,是存储引擎 InnoDB 生成的日志,主要为了保证数据的可靠性。redo log 记录了 InnoDB 所做的所有物理变更和事务信息。
redo log 默认存放在数据目录下面,可以通过修改 innodb_log_file_size 和 innodb_log_files_in_group 来配置 redo log 的文件数量和每个日志文件的大小。
错误日志:error log
1.1.4 慢查询日志:slow query log
slow_query_log = #开启慢查询
long_query_time = #设置慢查询阈值为1s
slow_query_log_file = /MysqL/log/MysqL-slow.log #设置慢查询日志存储路径
1.1.5 一般查询日志:general query log
一般查询日志,记录 MysqL 中所有的 query。慢查询记录的是超过阈值的 query,而一般查询日志记录的是所有的 query。一般查询日志的开启需要慎重,因为开启后对 MysqL 的性能有比较大的影响。
1.2 数据文件
.frm文件
InnoDB 引擎
是否开启独享表空间,可以通过配置参数 innodb_file_per_table 来实现。
innodb_file_per_table = #1 为开启独享表空间
下面为InnoDB表的创建语句,及相应的数据文件:
root@localhost [tempdb]>create table (id int) ENGINE = InnoDB;
Query OK, rows affected ( sec)
[root@MysqL-test tempdb]# ls -lrt a.*
-rw-r----- 1 MysqL MysqL 8556 Apr 13 01:57 a.frm
-rw-r----- 1 MysqL MysqL 98304 Apr 13 01:57 a.ibd
MyISAM引擎
下面为 MyISAM 表的创建语句,及相应的数据文件:
root@localhost [tempdb]>create table a (id int) ENGINE = MyISAM;
Query OK, 0 rows affected (0.01 sec)
[root@MysqL-test-1 tempdb]# ls -lrt a.*
-rw-r----- 1 MysqL MysqL 8556 Apr 13 02:01 a.frm
-rw-r----- 1 MysqL MysqL 1024 Apr 13 02:01 a.MYI
-rw-r----- 1 MysqL MysqL 0 Apr 13 02:01 a.MYD