返回顶部
首页 > 资讯 > 数据库 >MySQL Server 层四个日志详解
  • 891
分享到

MySQL Server 层四个日志详解

2024-04-02 19:04:59 891人浏览 薄情痞子
摘要

目录一、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--

本文标题: MySQL Server 层四个日志详解

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

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

猜你喜欢
  • MySQL Server 层四个日志详解
    目录一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志一、MySQ...
    99+
    2024-04-02
  • MySQLServer层四个日志的实现
    目录一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志一、MySQ...
    99+
    2024-04-02
  • MySQL 日志管理详解
    大纲 一、日志分类 二、日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一、日志分类 ·   &n...
    99+
    2024-04-02
  • mysql 日志分类详解
    前言 对于IT从业人员来说,日志是日常开发和问题排查过程中非常重要的信息,通过日志可以了解到很多有用的信息,很多奇怪的不好定位的问题,往往可以通过分析日志找到答案。 在mysql中,也提供了多种类型的日志,不同类型的日志其作用也不一样,本...
    99+
    2023-10-05
    mysql日志 mysql慢查询日志 mysql日志总结 mysql各类日志 mysql日志使用说明
  • 一文带你了解MySQL四大类日志
    目录前言mysql日志分为4大类错误日志修改系统配置二进制日志查看二进制日志查看二制日志的内容删除二进制日志暂时停止二进制日志的功能事务日志(或称redo日志)慢查询日志:slow query log总结前言 MySQL...
    99+
    2023-04-10
    mysql四种日志 mysql日志文件有几种 sql日志
  • 详解 Mysql 事务和Mysql 日志
    事务特性 原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,...
    99+
    2022-05-17
    mysql 事务 mysql 日志
  • MySQL四大类日志是什么
    今天小编给大家分享一下MySQL四大类日志是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言MySQL日志记录了MyS...
    99+
    2023-07-06
  • 详解mysql慢日志查询
    慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句。例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志中. 慢查询主要...
    99+
    2022-05-19
    MySQL 慢日志查询 MySQL 查询
  • MySQL的binlog日志使用详解
    binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但...
    99+
    2022-05-25
    MySQL binlog日志使用 MySQL binlog日志
  • mysql binlog 日志详解及恢复
    一、binlog概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undolog是完全不同的日志; 其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以"事务"的形式保存在磁盘...
    99+
    2023-09-07
    mysql 数据库
  • 【MySQL】备份二进制日志--Binlog Server
    mysqlbinlog会伪装成一个slave,连接主库请求指定的binlog file, 主库接收到这个请求之后创建一个binlog dump线程推送binlog给mysqlbinlog server。 ...
    99+
    2024-04-02
  • 详解MySQL 重做日志(redo log)与回滚日志(undo logo)
    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍。相对于其他几种日志而言, redo log 和 undo log 是更加神秘,难以观测...
    99+
    2022-05-11
    MySQL 重做日志 MySQL 回滚日志 MySQL redo和undo
  • MySQL三大日志——binlog、redoLog、undoLog详解
    目录跳转电梯 1. redoLog1.1 为什么需要redo log1.2 redo log基本概念1.3 redo log记录形式 2. binlog2.1 binlog基本概念2.2 binlog使用场景2.3 binlog...
    99+
    2023-08-19
    mysql redolog undolog binlog
  • sql server日志处理不当造成的隐患详解
    事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 “ Unknown error 258 ”,后来查询日志发现错误日志 第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有4...
    99+
    2024-04-02
  • Undo log日志详解
    今天和大家分享一下Undo log日志的知识点 1.什么是undo log? 撤销日志,在数据库事务开始之前,MYSQL会去记录更新前的数据到undo log文件中。如果事务回滚或者数据库崩溃时,可以利用undo log日志中记录的日志...
    99+
    2023-08-21
    mysql 数据库 java undo log
  • MYSQL如何查看操作日志详解
    目录前言一、文件记录数据库操作日志二、数据库表记录操作日志附:按时间段查看mysql的操作日志总结前言 mysql操作日志分为文件记录日志和数据库记录日志两种方式,最终效果一样 一、...
    99+
    2024-04-02
  • MYSQL SERVER收缩日志文件实现方法
    事务日志记录着在相关数据库上的操作,同时还存储数据库恢复(recovery)的相关信息。 收缩日志的原因有很多种,有些是考虑空间不足,有些则是应用程序限制导致的。 下面介绍的是在简单模式下,进行收缩操作。 一、命令行...
    99+
    2022-05-26
    MYSQL SERVER 收缩 日志文件
  • MySql完整卸载的四个步骤详解
    目录一. 这里第一步骤找到控制面板,点击卸载mysql。***二.删除原来MySql安装目录的所有文件三.系统删除目录四.删除注册表内容,win+R打开命令框,输入regedit打开...
    99+
    2024-04-02
  • MySQL-索引详解(四)
    ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易,人间真情 前言 本次MySQL—索引章节比较多,分...
    99+
    2023-09-04
    数据库 mysql 运维
  • MySQL中的redo log和undo log日志详解
    MySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎层的日志。 1 重做日志redo log 1.1 什么是redo ...
    99+
    2022-05-13
    MySQL redo log mysql undo log
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作