您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL的监控原理

时间:2021-09-18 09:29:03  来源:  作者:带你了解云计算

MySQL的监控通过日志文件来实现。

那么MySQL的日志文件有哪些类型呢? MySQL使用以下这几种类型的日志来记录服务器活动信息。

Error log错误日志:关于启动、关闭和异常情况的诊断消息(排查错误)

General query log通用查询日志:服务器从客户端接收到的所有语句(全局监控)

Slow query log慢速查询日志:执行时间较长的查询(性能优化)

Audit log审计日志:针对企业版的策略审计(主从搭配)

Binary log二进制日志:用于修改数据(备份用的到)

这5个类型的日志文件涵盖了所有MySQL的运行记录,是将来排查问题,优化性能的重要依据。很多经验丰富的DBA遇到问题就是先从这些日志文件下手分析的。重点之重,要考的。

 

日志文件的特点:占用大量的磁盘空间,存储在文件中,也可以存储在表中,但只有Slow query log慢速查询日志和General query log通用查询日志是可以存储在表中。可以用文本格式书写,但Binary log二进制日志除外。(因为Binary log中都是二进制格式啊!)

 

Error log错误日志:设置文件名set- -log- Error =filename来记录错误到给定的文件。或者在 UNIX或基于UNIX的系统中使用- -log-syslog服务器选项将错误消息发送到syslog系统日志上。

General query log通用查询日志:设置文件名set- -general_log_file=filename为日志查询。全局general_log和general_log_file服务器变量提供了对通用查询日志的运行时控制。将general_log设置为0(或OFF)以禁用日志,或设置为1(或ON)以启用日志。

Slow query log慢速查询日志:设置文件名set- -slow_query_log_file=filename以提供对慢速查询日志的运行时控制。设置slow_query_log为0禁用日志,设置为1启用日志,如果日志文件已经打开,则关闭该日志文件并打开新文件。

Binary log二进制日志:设置Set --log-bin以启用二进制日志记录。

服务器使用该选项值作为基本名称,在创建新日志文件时向基本名称添加一个递增的连续数字后缀。这些日志文件以二进制格式而不是文本格式存储。

Audit log审计日志:审计日志作为Enterprise Edition插件提供,当加载时,您可以使用该插件将事件记录到audit_log_file选项指定的文件中。审计不断写入审计日志,直到您删除插件,或者使用audit_log_policy=NONE选项设置关闭审计。通过在服务器启动时使用audit_log=FORCE_PLUS_PERMANENT作为选项来防止删除插件。

 

接下来我们逐个讲解

General query log通用查询日志可以使用general_log服务器选项启用,它是用来记录所执行语句的连接信息和详细信息。包括记录每个连接的时间和类型以及所有操作的进程ID,记录对所有表执行的所有语句,但不包括存储在二进制日志的更新操作行变化,因为这些不是更新操作以语句形式被存储的。而且General query log通用查询日志扩张的很快,但是如果以一个短时间内启用它,可以收集这些时间内所有活动的完整记录。

 

具体记录了些什么,我们在此举例说明,请看下面:

1424 Query /* mem dbpool.default */ update

`mem__events`.events set lastUpdateTime=1397633565708 where id=7 1429 Query /* mem dbpool.default */ update `mem__events`.events set lastUpdateTime=1397633565708 where id=4970 1424 Query /* mem dbpool.default */ commit 1429 Query /* mem dbpool.default */ commit 150526 7:32:46 1434 Connect root@localhost on mysql 1434 Query SET NAMES latin1 1434 Query SET character_set_results = NULL

里面包含事件类型和查询内容,示例类型:查询、连接

上面代码显示每个连接和查询的详细信息,记录每次连接的时间和所有操作的进程号。

 

Slow query log慢速查询日志可以通过使用slow_query_log服务器选项启用。用于记录执行时间超过指定阈值的语句。一般设定10秒(默认),可以使用long_query_time server选项更改此持续时间。可以指定微秒精度的秒数。可以记录不使用索引的语句,甚至是long_query_time下面的语句。比如用log_queries_not_using_indexes来实现。可以使用mysqldumpslow命令行程序查看Slow query log慢速查询日志。

Slow query log慢速查询日志是记录管理和复制语句。但默认情况下,慢速查询日志不记录管理语句。可以通过启用log_slow_admin_statements服务器选项来记录这些语句。默认情况下,从复制主机复制的语句不会出现在慢速查询日志中,即使它们超过了long_query_time服务器选项指定的时间。此时可以要记录这些语句,请启用log_slow_slave_statements服务器选项来实现。

如何过滤慢速查询日志事件?这有两个额外的服务器选项,您可以使用来过滤缓慢的查询日志输出:

第一个min_examined_row_limit:指定语句必须检查的最低行数,以便慢速查询日志记录该语句。

第二个log_throttle_queries_not_using_indexes:它指定慢速查询在60秒内记录的查询数量,因为它们不使用索引。慢速查询日志记录了这些查询的数量后,它汇总了在该时间段内花费在其余语句上的数量和总时间。默认情况下,该服务器选项的值为0,表示它记录所有此类查询。

举例说明:

# Time: date-and-time # User@Host: root[root] @ localhost [127.0.0.1] Id: 7694 # Query_time: 1.010099 Lock_time: 0.000023 Rows_sent: 0 Rows_examined: 1 SET timestamp=timestamp; /* mem dbpool.default */ update `mem__inventory`.`MysqlServer` set `timestamp`=timestamp where hid=x'08310BA6528CBF5783BBD95CE5B4561F';

例子包括服务器日期和时间,连接和查询信息,运行查询和持有锁的时间。

 

我们使用mysqldumpslow查看慢速查询日志,mysqldumpslow命令行程序总结了慢速查询日志的内容。它将类似的查询分组在一起,例如将数值参数更改为N,将字符串参数更改为'S',显示此类查询的数量以及运行查询所需的平均时间和总时间。使用-g选项提供一个搜索词,仅显示匹配搜索项的语句的摘要信息。也可以通过设定log_output服务器选项来指定表或文件日志输出。。

log_output服务器选项是用来配置慢速查询日志和通用查询日志。它包含一个或多个FILE、TABLE或NONE值(以逗号分隔)。默认情况下,它的值为FILE。NONE代表日志既不写文件,也不写表。NONE的存在会导致忽略FILE或TABLE。FILE表示日志分别写入由slow_query_log_file和general_log_file MySQL服务器选项指定的文件。在MySQL数据目录文件中的缺省值为hostname-slow.log和hostname.log。TABLE表示在mysql数据库中,慢速查询日志写到slow_log表,常规日志写到general_log表。

 

随着时间的推移,日志文件会占用更大的空间。定期备份和删除旧的日志文件,并重新记录到新的日志文件是DBA的日常工作之一。注意,如果使用二进制日志进行复制,请谨慎使用。备份后,刷新日志。刷新日志需要注意

1. 创建新的二进制日志文件

2. 关闭并重新打开常规和慢速查询日志文件。在创建新日志时,必须在刷新之前重命名当前日志文件。

可以创建自己的脚本或使用提供的mysql-log-rotate脚本来实现定期安排日志文件的循环。备份日志文件后,刷新日志以强制MySQL服务器开始写入新的日志文件。可以通过执行FLUSH LOGS SQL语句或执行mysqladmin flush-logs来实现。在刷新二进制日志会导致二进制日志记录顺序中的下一个文件重新开始。刷新普通和慢速查询日志时,这将关闭日志文件,重新打开它们,然后在相同的文件名下重新进行日志记录,要启动新的日志,请在刷新之前重命名现有的日志文件。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  Tags: MySQL  点击:(6)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  Tags: MySQL  点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  Tags: MySQL  点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  Tags: MySQL  点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  Tags: MySQL  点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  Tags: MySQL  点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  Tags: MySQL  点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  Tags: MySQL  点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Tags: MySQL  点击:(31)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条