hi,我是蛋挞,一个初出茅庐的后端开发,希望可以和大家共同努力、共同进步!
开启掘金成长之旅!这是我参与「掘金日新计划 · 4 月更文挑战」的第 23 天,点击查看活动详情
- 起始标记->架构篇:「架构篇 | 1」
- 结尾标记->架构篇:「架构篇 | 1」
1.1 MySQL逻辑架构图
- 客户端连接器
- 系统管理和控制工具
- 连接池
- SQL接口
- 解析器
- 查询优化器
- 缓存
- 存储引擎
- 文件和日志
Redo log 、Undo log、Error Log、SlowQueryLog...
1.2MySQL的日志文件
MySQL从物理结构上可以分为日志文件和数据及索引文件,MySQL通过日志记录了数据库操作信息和错误信息。 常见日志文件如下:
- 错误日志error.log
- 二进制日志mysql-bin
- 通用查询日志general_query.log
- 慢查询日志slow_query_log.log
- 重做日志Redolog
- 中继日志relaylog
如何知道这些日志是否开启,及存储在哪?
mysql> show variables like 'log_%':
1.2MySQL的日志文件详解
01-错误日志error log
- 默认开启,记录运行过程中所有严重的错误信息,及每次启动和关闭的详细信息
- 通过log_error和log_warnings配置
- log_error:指定存储位置
- log-warnings:配置警告信息级别,0值不记录告警日志,大于等于1值记录告警日志
log_error=/var/1og/mysql-error .log
log_warnings=2
02-二进制日志bin log
- 默认关闭,须通过配置开启,记录数据库所有的DDL语句和DML语句,不包括DQL语句
- 主要用于实现主从复制、数据备份、数据恢复
- 通过log-bin配置
server_id=42
log-bin=mysq1-bin
数据定义语言: 简称DDL(Data Definition Language)。
- 作用:用来定义数据库对象: 数据库,表,列等。
- 关键字: create,alter,drop等
数据操作语言: 简称DML(Data Manipulation Language).。
- 作用:用来对数据库中表的记录进行更新
- 关键字: insert,delete,山date等
数据查询语言: 简称DQL(Data Query Language)
- 作用:用来查询数据库中表的记录。
- 关键字: select,from,where等
数据控制语言: 简称DCL(Data Control Language)
- 作用:用来定义数据库的访问权限和安全级别,及创建用户
03-通用查询日志
- 默认关闭,记录用户的所有操作,包含增删查改等详细信息。如果不是调试,不建议开启
- 通过general log和general log file配置
- general_log:日志开关
- general_log_file: 日志存储路径,如果没指定默认host_name.log
genera1_1og={ONIOFF}
genera1_1og_file=/var /1ib/mysq1/host_name .1og
04-慢查询日志
- 默认关闭,记录SQL执行时间超闽指定时间的所有查询
- 通过slow_query_log、long_query_time和slow_query_log_file配置
- slow_query_log:日志开关
- long_query_time: 慢查询闻值
- slow_query_log_file: 日志存储路径,如果没指定默认host_name-slow.log
1.3MySQL数据文件
MySQL的数据及索引文件存储在哪里?
show variables like '%datadir%'
情况01-ibdata文件:
使用系统表空间存储表数据和索引信息,那么数据存储在一个或多个ibdata文件中
情况02-InnoDB存储引擎的数据文件
表名.frm文件:主要存放与表相关的元数据信息,包括: 表结构的定义信息
表名.ibd变件:一张表一个ibd文件,存储表数据和索引信息
情况03-MyISAM存储引擎的数据文件
表名.frm文件:主要存放与表相关的元数据信息,包括: 表结构的定义信息
表名.myd文件:主要存放数据
表名.myi文件:主要存放索引
1.4一条SQL语句的完整执行流程
分析SQL语句如下:
select c_id,first_name,]ast_name from customer where c_id=14;
此文章为5月Day2学习笔记,内容来源于极客时间《10小时吃透MySQL底层原理》