广告
返回顶部
首页 > 资讯 > 数据库 >MySQLServer层四个日志的实现
  • 359
分享到

MySQLServer层四个日志的实现

2024-04-02 19:04:59 359人浏览 独家记忆
摘要

目录一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志一、Mysq

一、Mysql Server层日志简介

一个mysql client发起一个连接请求,处理请求的过程如下图所示:

在这里插入图片描述

Mysql日志是在MySQL server上生成的,不管更改哪个存储引擎,这些日志都是需要有的,包括:

  • 错误日志:记录mysqld服务运行过程中出现的cordump、error、exception等
  • 查询日志:记录客户端所有的SQL。由于上线项目的SQL太多了,开启查询日志IO太多导致MySQL效率低下,我们一般都不会开启,只有调试时才开启
  • 二进制日志:记录数据的更改(insert、update、delete、alter …),非常重要,可用于数据恢复,主从复制。主从复制技术依赖于log_bin,主库所有的更改操作都记录在log_bin里,从库从binlog读取主库所有的操作,自己再执行一遍。
  • 慢查询日志:记录了一些执行时间超过指定值的SQL语句,可供开发人员分析耗时SQL,从而针对性优化

查看日志相关变量

在这里插入图片描述

二、配置文件参数

my.cnf

在这里插入图片描述

通过set方法只能影响当前session,如果想要配置永久有效,需要在配置文件上进行设置,然后重启MySQL服务,就可以永久生效

linux下重启mysqld服务的命令:sudo service mysqld restart

我们查看一下配置文件/etc/mysql/my.cnf

在这里插入图片描述

  • 给出log-error的路径就是开启了log-error,如果不自定义log-error的路径,默认在data_dir
  • 在开启log-bin=mysql-bin的同时还要加上server-id=1(表示当前MySQL Server的身份),否则sudo service mysqld restart无法重启服务
  • 设置过期的时间expire_log_days,因为总有一天磁盘会被这个日志占满,导致服务器不可运行,超过设置时间后日志文件会被删除

三、错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止,以及服务器在运行过程中发生任何严重错误(cordump,error,exception…)时的相关信息。当数据库出现故障导致无法正常使用时,可以首先查看此日志

mysqld 使用的错误日志名为 host_name.err(host_name 为主机名) ,并默认在参数data_dir(数据目录)指定的目录中写入日志文件

四、查询日志

查询日志记录了client发送的所有SQL语句

由于上线项目sql特别多,开启查询日志IO太多导致MySQL效率低,我们一般都不会开启,只有在调试时才开启,比如通过查看sql发现热点数据从而可以进行缓存

show global variables like '%genera%';

在这里插入图片描述

五、二进制日志

不是明文,不能直接查看,需要通过mysqlbinlog工具(mysql原生自带)解析binlog日志文件

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言) 语句,但是不包括数据查询语句(不记录select操作,记录的是数据库的更改操作

语句以“事件”的形式保存,它描述了数据的更改过程。二进制日志对于灾难时的数据恢复起着极其重要的作用

两个重要的应用场景:主从复制、数据恢复

主从复制:主库所有的更新操作(update、delete、insert、alter …)都记录在binlog中,从库读主库的binlog,把binlog的所有操作在从库上在进行一遍

查看当前的binlog:

show binary logs; -- show master logs;

在这里插入图片描述

binlog默认在MySQL的data_dir下

在这里插入图片描述

1. 演示binlog记录更改

我们先刷新一下,生成一个新的binlog

在这里插入图片描述

切换数据库

在这里插入图片描述

更改一下数据

在这里插入图片描述

再次查看binlog

在这里插入图片描述

我们发现日志的filesize和刚才的不一样了,肯定记录我们刚才的数据更改操作

如果我们直接cat日志查看,会发现不是明文,无法直接查看

在这里插入图片描述

我们需要通过mysqlbinlog进行查看,如下:

mysqlbinlog --no-defaults --database=school --base64-output=decode-rows -v --start-datetime='2022-03-01 00:00:00' --stop-datetime='2022-03-31 00:00:00' mysql-bin.000001 | more
  • database:指定查看某个库的更改
  • base64-output:binlog解码方式
  • start-datetime & stop-datetime:指定查看某个时间段内的更改,不写则查看所有的更改
  • mysql-bin.000001:查看的二进制日志文件

我们查看一下binlog

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

@1、@2、@3、@4:表示数据库表的4个字段

server id:表示我们在my.cnf中设置的id,用于标识当前MySQL的身份

at 565、at679:指的是当前事件在binlog记录的位置,数据恢复的时候使用

2. 演示binlog数据恢复

在这里插入图片描述

现在创建数据库mytest,并创建表,添加数据

在这里插入图片描述

假如现在有人把库删除了:

在这里插入图片描述

这时mytest库的所有表和数据都没有了,然而这些操作都会记录在二进制日志binlog里面

理论上来说,可以从binlog把丢失的数据恢复出来。由于恢复过程也是对数据的修改,所以恢复过程产生的日志也要记录在binlog中,这就需要我们指定binlog恢复区间

我们现在知道,我们建库、建表、插入数据的操作都记录在mysql-bin.00003文件中

在这里插入图片描述

我们现在刷新一下,生成一个新的binlog,这就可以让我们接下来数据恢复的操作被记录在mysql-bin.00004文件中,而不会在追加到mysql-bin.00003

在这里插入图片描述

我们先查看mysql-bin.00003,找需要恢复的区间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

从mysql-bin.000003中拿出区间内所有的操作,通过管道放到MySQL shell上执行

在这里插入图片描述

查看一下当前的库

在这里插入图片描述

再查看一下表和数据

在这里插入图片描述

到这里,数据已经全部恢复了

我们不仅可以通过binlog记录的位置,得到需要恢复的区间,也可以通过binlog记录的时间得到需要恢复的区间

在这里插入图片描述

参数为:start-datetime、stop-datetime

由于binlog有一个过期时间,过期的日志数据都会进行备份,没有过期的数据可以直接通过binlog恢复,如果需要恢复过期的数据,通过以下命令即可:

mysql> source ~/data.sql
$cat ~/data.sql | mysql -u root -p

六、慢查询日志

MySQL可以设置慢查询日志,当SQL执行的时间超过我们设定的时间,那么这些SQL就会被记录在慢查询日志当中

我们通过查看日志,用explain分析这些SQL的执行计划,来判定为什么效率低下,是没有使用到索引?还是索引本身创建的有问题?或者是索引使用到了,但是由于表的数据量太大,花费的时间就是很长,那么此时我们可以把表分成n个小表,比如订单表按年份分成多个小表等

慢查询日志相关的参数如下所示:

在这里插入图片描述

慢查询日志记录了包含所有执行时间超过参数 long_query_time(单位:秒)所设置值的 SQL语句的日志,在MySQL上用命令可以查看,如下:

在这里插入图片描述

这个值是可以修改的:

在这里插入图片描述

现在修改成执行时间超过1秒的SQL都会被记录在慢查询日志当中!可以设置为0.01秒,表示10毫秒

慢查询日志,默认名称是host_name-slow.log,存放在MySQL的data_dir下,内容格式显示大致如下:

在这里插入图片描述

show profiles命令可有查看sql详细的运行时间,全局变量的名字是:profiling

首先需要:set profiling=on

在这里插入图片描述

 到此这篇关于MySQL Server层四个日志的实现的文章就介绍到这了,更多相关MySQL Server层日志内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQLServer层四个日志的实现

本文链接: https://www.lsjlt.com/news/144657.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQLServer层四个日志的实现
    目录一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志一、MySQ...
    99+
    2022-11-13
  • MySQL Server 层四个日志详解
    目录一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志一、MySQ...
    99+
    2022-11-13
  • JMeter自定义日志与日志分析的实现
    目录1 JMeter日志概览2 JMeter自定义日志3 JMeter日志分析1 JMeter日志概览 JMeter与Java程序一样,会记录事件日志,日志文件保存在bin目录中,名...
    99+
    2022-11-12
  • 使用LogAnalyzer怎么实现一个日志系统
    使用LogAnalyzer怎么实现一个日志系统,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、部署LAMP环境1、安装CentOS操作系统,...
    99+
    2022-10-18
  • SpringBoot中怎么实现一个slf4j日志功能
    SpringBoot中怎么实现一个slf4j日志功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。其pom.xml里的依赖定义如下:上图看到很多Starter,比如Spri...
    99+
    2023-06-04
  • SQLServer 清理日志的实现
    本文以sql2012为例 第一步,(查询日志中文件名和大小): USE 数据库名 GO SELECT file_id, name,size,* FROM sys.database_files; 查询结果如上图所...
    99+
    2023-01-12
    SQLServer清理日志 SQLserver清除日志
  • SQLServer清理日志的实现
    本文以sql2012为例 第一步,(查询日志中文件名和大小): USE 数据库名 GO SELECT file_id, name,size,* FROM sys.databa...
    99+
    2023-01-12
    SQLServer 清理日志 SQL server清除日志
  • 如何实现MySQL底层优化:日志系统的优化与性能提升
    MySQL是目前最流行的关系型数据库管理系统之一,作为网站及应用程序后端的核心组件,其性能优化显得尤为关键。其中,日志系统是MySQL的重要组成部分,其性能对数据库的整体性能影响极大。因此,本文将深入讨论MySQL日志系统的优化和性能提升。...
    99+
    2023-11-08
    MySQL 优化 日志
  • SpringBoot利用AOP实现一个日志管理详解
    目录1. 需求2. 新建一张日志表3. 写相应的Controller层4.Service接口层5.Service实现6.Mapper接口7.Mapper.xml(我用的是Mybati...
    99+
    2022-11-13
  • SpringBoot整合log4j2日志的实现
    目录关于日志级别 为什么选用log4j2排除 spring-boot 自带的 logback 依赖 添加 log4j2 依赖 配置文件节点解析 根节点Configuration Ap...
    99+
    2022-11-12
  • ELK收集Tomcat日志的实现
    目录01 Tomcat 安装与测试02 修改 Tomcat 日志为 Json 格式03 配置 Filebeat 采集 Tomcat 日志04 使用Kibana查看Tomcat日志01...
    99+
    2022-11-13
  • centos修改dhcpd日志实现不记入系统日志的方法
    小编给大家分享一下centos修改dhcpd日志实现不记入系统日志的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!编辑dhcp服务配置文件vim /etc/dhcp/dhcpd.conf   在末尾...
    99+
    2023-06-10
  • 如何实现MySQL底层优化:日志系统的高级配置和性能调优
    如何实现MySQL底层优化:日志系统的高级配置和性能调优摘要:MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种规模的应用程序中。在大数据量和高并发的场景下,MySQL的性能优化显得尤为重要。本文将重点介绍MySQL底层的日志系统...
    99+
    2023-11-08
    MySQL 性能调优 日志配置
  • Spring Boot Actuator管理日志的实现
    为了解决以下两个问题: 1、单JAR包应用查看日志需要的时候如果需要远程访问服务器登录查看日志,那样相对比较麻烦 2、生产环境为了解决BUG需要临时更换日志级别,总不能重启服务来解决...
    99+
    2022-11-13
  • springboot 实现记录业务日志和异常业务日志的操作
    日志记录到redis展现形式 1.基于注解的方式实现日志记录,扫描对应的方法实现日志记录 @Inherited @Retention(RetentionPolicy.RUN...
    99+
    2022-11-12
  • Python实现过滤单个Android程序日志脚本分享
    在Android软件开发中,增加日志的作用很重要,便于我们了解程序的执行情况和数据。Eclipse开发工具会提供了可视化的工具,但是还是感觉终端效率会高一些,于是自己写了一个p...
    99+
    2022-06-06
    脚本 Python Android
  • Java中怎么实现一个日志切割清理工具
    本篇文章给大家分享的是有关Java中怎么实现一个日志切割清理工具,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过...
    99+
    2023-06-17
  • springboot自定义日志注解的实现
    前言       在之前的日志记录的写法中,我们大多是写一个工具类,在这个类里面定义日志保存的方法,然后再controller中执行请求的时候调用即可,...
    99+
    2022-11-13
  • C# log4net 日志输出的实现示例
    目录第一步:安装log4net第二步:添加log4net.config配置文件第三步:添加日志配置第四步:AssemblyInfo.cs中配置 Watch = true思路: 1.安...
    99+
    2022-11-12
  • springboot实现基于aop的切面日志
    本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下 通过aop的切面方式实现日志 通切面拦截所有指定包下的所有方法 @Aspect ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作