MySQL 8 组件架构和错误日志

Posted Navicat中国

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 8 组件架构和错误日志相关的知识,希望对你有一定的参考价值。

mysql 服务器版本 8 的众多重大变化之一包括一个新的基于组件的基础架构。这将使架构更加模块化,同时允许用户添加单个组件来扩展服务器功能。

每个组件都提供服务器以及其他组件可用的服务。事实上,服务器本身现在被认为是一个组件,与其他组件一样。组件仅通过它们提供的服务相互交互。

启用组件

通过 INSTALL COMPONENT 和 UNINSTALL COMPONENT SQL 语句实现组件加载和卸载。例如:

INSTALL COMPONENT 'file://component_validate_password';
UNINSTALL COMPONENT 'file://component_validate_password';

加载器服务处理组件加载和卸载,还列出 mysql.component 系统表中已加载的组件。

INSTALL COMPONENT 将组件加载到服务器中并立即激活它们。加载器服务还在 mysql.component 系统表中注册已加载的组件。对于后续服务器重启,mysql.component 中列出的任何组件都在启动期间由加载器服务加载。

UNINSTALL COMPONENT 取消激活组件并从服务器卸载它们。加载器服务还会从 mysql.component 系统表中取消注册组件,以便在后续服务器启动期间不再加载它们。

若要查看已安装的组件,请使用以下语句:

SELECT * FROM mysql.component;

错误日志筛选和路由

由于采用了新的组件架构,可以过滤日志事件,并可以将各种格式的输出发送到多个目标,包括 JSON。日志事件甚至可以路由到第三方产品,如 Navicat Monitor,以进行其他处理和分析。

错误日志配置存储在全局 log_error_services 和 log_error_verbosity 变量中,这些变量都存储在 global_variables 表中。错误日志变量都是以“log_error_”为前缀,因此我们可以按如下方式获取两者的值:

mysql>select * from global_variables where VARIABLE_NAME like 'log_error_%';
+---------------------+----------------------------------------+
| VARIABLE_NAME       | VARIABLE_VALUE                         |
+---------------------+----------------------------------------+
| log_error_services  | log_filter_internal; log_sink_internal |
| log_error_verbosity | 2                                      |
+---------------------+----------------------------------------+

有四个可用的日志组件。它们存储在 lib/plugins 目录中,扩展名为“.so”:

  • component_log_filter_dragnet.so
  • component_log_sink_json.so
  • component_log_sink_syseventlog.so
  • component_log_sink_test.so

     

组件可以细分为两种类型:filter 和 sink。

  • filter 组件完成针对错误日志事件的筛选。如果没有启用 filter 组件,就不会进行筛选。否则,任何已启用的 filter 组件仅影响 log_error_services 变量中列出的组件的日志事件。
  • 错误日志 sink 组件是写入器,负责错误日志输出。如果没有启用 sink 组件,就不会有任何日志输出。某些 sink 组件描述是指默认的错误日志目标。这是由 log_error 系统变量指示的控制台或文件。

     

若要加载组件,你需要指定其 URN。这包括:

“file://” + [the filename without the .so extension]

例如,若要将编写器加载到 json 组件,你可以这样操作来启用它:

mysql> INSTALL COMPONENT 'file://component_log_sink_json';

mysql> SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal; 
log_sink_json';

mysql> select * from global_variables where VARIABLE_NAME like 'log_error_%';

+---------------------+-------------------------------------------------------+
| VARIABLE_NAME       | VARIABLE_VALUE                                        |
+---------------------+-------------------------------------------------------+
| log_error_services  | log_filter_internal; log_sink_internal; log_sink_json |
| log_error_verbosity | 2                                                     |
+---------------------+-------------------------------------------------------+

我们将在后续的文章中更详细地探索 MySQL 8 中的错误日志!

往期回顾

  1. 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件
  2. Navicat 荣获 Microsoft 金牌合作伙伴
  3. Navicat 16.3 正式支持 OceanBase 企业版​
  4. 免费试用 Navicat 16
  5. Navicat 的 20年发展史
  6. SQL 语句中 WHERE 1=1 的作用
  7. SQL 中计算总行数的百分比
  8. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
  9. Navicat NAPP 校企合作和申请免费一年期的 Navicat Premium 教育版

MYSQL架构篇

技术图片

目标:
掌握Mysql的各组件及各组件的功能
理解Mysql简版执行流程和详细执行流程
掌握MyIsam和InnoDB的区别并说明使用场景
掌握Mysql日志文件及主要日志文件的作用
理解Mysql的数据文件及作用
使用命令查看mysql日志
配置my.cnf开启二进制日志、通用查询日志、慢查询日志等
掌握索引、分类、优劣势
使用命令创建、查看、删除索引
理解索引的原理和存储结构

1. MySQL架构篇

1.1 逻辑架构

逻辑架构图:
技术图片

如上图俩圈圈,分为Server层和存储引擎层两部分。

1.1.1 Server层

涵盖MySQL的大多数核心服务功能,以及内置函数,存储过程、触发器、视图都在这一层实现。

1) 连接器:

负责跟客户端建立连接、获取权限、维持和管理连接。

2) 查询缓存:

MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。
如果语句在查询缓存中,则直接返回之前的查询结果,如果不在,执行查询sql完成后,执行结果会被存入查询缓存中。
但不建议使用,查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。

3) 分析器:

分析器先会做“词法分析”,“语法分析”,判断你输入的这个SQL语句是否满足MySQL语法

4) 优化器:

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

5) 执行器:

开始执行的时候,要先判断一下你对这个表T有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。

1.1.2 存储引擎层

负责数据的存储和提取,支持InnoDB、MyISAM、Memory等多个存储引擎。

MyISAM:高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行锁、
支持3种不同的存储格式。包括静态型、动态型和压缩型。
InnoDB:5.5版本后MySQL的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM处理速度稍慢、支持外键。

InnoDB和MyISAM存储引擎区别
技术图片

存储引擎的选型:
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。
如需频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。

物理架构

MySQL是通过文件系统对数据和索引进行存储,从物理结构上可以分为日志文件和数据索引文件。
日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储
顺序IO方式:
优点:记录速度快,只能追加,适合日志
劣势:占空间
随机IO方式:
优点:省空间,适合数据+索引
劣势:相对慢

MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。

日志文件

错误日志(errorlog):

记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。

二进制日志(binlog):

是逻辑日志,记录的是这个语句的原始逻辑(但不包括select语句内容)
如果是DDL语句(CREATE、ALTER、DROP),则直接记录到binlog日志,而DML(增删改)语句,必须通过事务提交才能记录到binlog日志中。

慢查询日志(slow query log)

SQL调优定位慢的 select,默认是关闭的。
需要通过以下设置进行开启:

开启慢查询日志

slow_query_log=ON

慢查询的阈值,记录执行时间超过3秒的所有查询,便于收集查询时间比较长的SQL语句

long_query_time=3

日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不

是绝对路径名,文件则写入数据目录。
slow_query_log_file=file_name

数据文件

查看文件位置
SHOW VARIABLES LIKE ‘%datadir%‘;
datadir /u02/mysql/

InnoDB数据文件
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息
.ibd:使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件。

开启慢查询日志

slow_query_log=ON

慢查询的阈值

long_query_time=3

日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不

是绝对路径名,文件则写入数据目录。
slow_query_log_file=file_name
show variables like ‘log_%‘;
SHOW VARIABLES LIKE ‘%datadir%‘;
ibdata文件:使用共享表空间存储表数据和索引信息,所有表共同使用一个或者多个ibdata文
件。
MyIsam数据文件
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息
.myd文件:主要用来存储表数据信息。
.myi文件:主要用来存储表数据文件中任何索引的数据树











































以上是关于MySQL 8 组件架构和错误日志的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL架构篇

MySQL 配置文件及逻辑架构

mysql高可用架构设计

efk 日志集群架构了解

MySQL - 实战 - 基础架构和日志系统

innodb架构理解