开发中常用的数据库日志都长啥样呢?

news2024/11/15 8:21:46

目录

常见日志级别 

数据库日志

Undo log 逻辑日志

redolog binlog

慢查询日志

AOF 文本文件

RDB 二进制文件


常见日志级别 

  1. DEBUG:用于详细记录应用程序的运行过程,如变量值、执行流程等。DEBUG级别的日志通常用于开发和调试过程中,以便于了解程序的内部运行状态。

  2. INFO:用于记录应用程序的一般信息,如状态变更、操作结果等。INFO级别的日志通常用于生产环境中,以便于了解应用程序的运行状况。

  3. WARNING:用于记录可能导致问题的事件,如性能瓶颈、配置错误等。WARNING级别的日志通常用于提醒开发者关注潜在的问题和风险。

  4. ERROR:用于记录应用程序运行过程中出现的错误和异常。ERROR级别的日志通常包含错误发生的时间、位置、详细描述和堆栈跟踪等信息,以便于问题排查。

  5. CRITICAL:用于记录应用程序中的严重错误和问题,如数据丢失、系统崩溃等。CRITICAL级别的日志通常用于处理紧急情况和重大事件。

        这些日志级别通常按照从低到高的顺序排列,即DEBUG < INFO < WARNING < ERROR < CRITICAL。在配置logging库时,可以设置日志记录的最低级别,以便于过滤不需要的日志信息。

 

数据库日志

      

先讲一下三种日志类型(主要区别在于记录的信息和恢复数据的方式):

  1. 逻辑日志(Logical Log):逻辑日志记录了数据库操作的高级描述,例如插入、更新和删除操作。逻辑日志关注数据的变更内容,而不关注底层数据结构的改变。UndoLog就是一种逻辑日志,它记录了对数据库表的操作,以便在需要时撤销这些操作。

  2. 物理日志(Physical Log):物理日志记录了数据库底层数据结构的改变,例如磁盘上的数据页的变化。物理日志关注数据存储的具体实现,而不关注数据的逻辑变更。物理日志通常用于数据库的故障恢复、备份等场景。

  3. 二进制日志(Binary Log,也称为Binlog)是MySQL数据库中用于记录数据库操作的一种日志文件。它记录了对数据库进行的所有更改操作(如插入、更新、删除等)以及这些操作发生的时间。二进制日志以二进制格式存储。在某种程度上类似逻辑日志,因为它记录了操作的高级描述。

Undo log 逻辑日志

        实际上,UndoLog日志文件中的记录格式取决于你的应用程序需求和日志记录方式。通常,日志文件中的记录会以文本形式存储,每行一个记录,可以是JSON、CSV或其他自定义格式。以下是一个以JSON格式存储的UndoLog日志文件记录示例:

{"id": 1, "operation": "UPDATE", "timestamp": "2022-08-01T12:34:56Z", "table_name": "User", "primary_key": 1, "old_data": {"name": "Alice", "age": 25}, "new_data": {"name": "Alice", "age": 26}}
{"id": 2, "operation": "INSERT", "timestamp": "2022-08-01T12:35:30Z", "table_name": "User", "primary_key": 2, "old_data": null, "new_data": {"name": "Bob", "age": 30}}
{"id": 3, "operation": "DELETE", "timestamp": "2022-08-01T12:36:10Z", "table_name": "User", "primary_key": 3, "old_data": {"name": "Charlie", "age": 22}, "new_data": null}

        示例中,日志文件包含3条UndoLog记录,分别是一条更新操作、一条插入操作和一条删除操作。每条记录都是一个JSON对象,占据一行。这种格式便于解析和处理。

redolog binlog

        重做日志redo log和binlog 日志都是以二进制的形式保存的,不能直接“看”,
        mysqlbinlog工具查看的binlog日志记录类似:

# at 4
#211001 12:00:00 server id 1  end_log_pos 0 CRC32 0x12345678
Start: binlog v 4, server v 8.0.27-0ubuntu0.20.04.1-log created 211001 12:00:00 at startup

# at 123
#211001 12:00:00 server id 1  end_log_pos 0 CRC32 0x23456789
Query: thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1633080000/*!*/;
BEGIN
/*!*/;
# at 456
#211001 12:00:00 server id 1  end_log_pos 0 CRC32 0x34567890
Query: thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1633080000/*!*/;
UPDATE users SET age=26, last_login='2021-10-02 10:00:00' WHERE id=100
/*!*/;
# at 789
#211001 12:00:00 server id 1  end_log_pos 0 CRC32 0x45678901
Query: thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1633080000/*!*/;
COMMIT
/*!*/;

        而redo log主要用于数据库内部处理,通常不需要直接查看或分析。在需要恢复数据时,数据库管理系统会自动处理redo log

慢查询日志

        MySQL的慢查询日志记录了执行时间超过指定阈值的查询。慢查询日志可以帮助您发现性能瓶颈并优化数据库性能。慢查询日志的格式和内容可能因MySQL版本和配置而异,但通常包括查询的SQL语句、执行时间、锁定时间等信息。

        简化的示例

# Time: 211001 12:00:00
# User@Host: example_user[example_user] @ localhost []
# Thread_id: 1  Schema: example_db  Last_errno: 0  Killed: 0
# Query_time: 5.123456  Lock_time: 0.000123  Rows_sent: 1  Rows_examined: 1000  Rows_affected: 0
# Bytes_sent: 100  Tmp_tables: 0  Tmp_disk_tables: 0  Tmp_table_sizes: 0
# QC_Hit: No  Full_scan: Yes  Full_join: No  Tmp_table: No  Tmp_table_on_disk: No
# Filesort: Yes  Filesort_on_disk: No  Merge_passes: 0
SET timestamp=1633080000;
SELECT * FROM example_table WHERE some_column = 'some_value';

        记录了一个SELECT操作,涉及到名为example_table的表。此操作的查询时间(Query_time)为5.123456秒,超过了慢查询阈值。慢查询日志还包含了其他元数据,如锁定时间(Lock_time)、发送的行数(Rows_sent)、查询类型(全表扫描、文件排序等)等。

        启用慢查询日志并设置阈值,您需要在MySQL配置文件(如my.cnfmy.ini)中添加以下配置:

slow_query_log = 1
slow_query_log_file = /path/to/your/slow-query.log  # 日志文件路径
long_query_time = 1  # 慢查询阈值设置为1s

AOF 文本文件

        AOF(Append Only File)属于Redis数据库的持久化日志。它记录了操作Redis的所有命令,以便在Redis服务器重启时恢复数据。AOF日志以文本格式存储,每一行都是一个Redis命令。通常具有 .aof 扩展名,例如 appendonly.aof。

*2
$6
SELECT
$1
0
*3
$3
SET
$3
key
$5
value
*3
$5
LPUSH
$6
mylist
$4
item

        例中的AOF文件包含了三个Redis命令:SELECT 0(选择数据库0)、SET key value(设置键值对)和LPUSH mylist item(将元素推入列表)。当Redis服务器启动时,它会自动执行这些命令以恢复数据。

RDB 二进制文件

        Redis的RDB(Redis Database)文件是一个二进制文件,用于存储Redis数据库在某个时间点的数据快照。RDB文件通常具有.rdb扩展名,例如dump.rdb。由于RDB是二进制格式,因此它的内容无法直接阅读。

        RDB文件包含了Redis数据库中的键值对数据,以及一些元数据,如过期时间等。RDB文件的结构和格式由Redis内部实现,通常不需要关注。(虚晃一枪收尾)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不看后悔一辈子!不看错过50K!历尽心血总结Redis全局命令

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的敖云岚&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏&#xff1a;Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c…

【Python】单元测试框架unitest及其高级应用

目录 Unittest 简单使用示例 重要概念 断言方法 深入 高级应用 认识Page Object 资料获取方法 Unittest Unittest是python的一个单元测试框架&#xff0c;但是它不仅适用于单元测试&#xff0c;还适用自动化测试用例的开发与执行。我们可以很方便的使用它组织执行测试用…

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法 标记清除&#xff08;Mark Sweep&#xff09; 概念 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分&#xff0c;比如说我们的应用程序本身。 mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内…

CSMA/CD协议原理

共享总线以太网具有天然的广播特性&#xff0c;即使总线上某个站点给另一个站点发送单播帧&#xff0c;表示帧的信号也会沿着总线传播到总线上的其他各站点 。 当某个站点在总线上发送顿时&#xff0c;此时&#xff0c;如果总线上的其他站点也要在总线当某个站点在总线上发送顿…

Qt应用开发(基础篇)——时间微调输入框 QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类&#xff0c;这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件&#xff0c;父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

资深java程序员的IDEA的常用设置

设置入口 打开项目以后也可以在左上角File-->setting进行设置&#xff0c;不过部分设置的是该项目的&#xff0c;换个项目可能就变了&#xff0c;建议打开项目之前就设置。 一般新的idea软件默认是下图页面&#xff0c;或者打开项目后可以点击File-->Close Project退到…

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型&#xff08;本文所阐述的分支模型&#xff09;构思于 2010 年&#xff0c;也就是 Git 诞生后不久&#xff0c;距今已有 10 多年。在这 10 多年中&#xff0c;Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里&#xff0c;Git 本身…

C++异常使用

异常关键字&#xff1a; try&#xff1a;在try部可检测异常 catch&#xff1a;当发现异常捕获处 throw&#xff1a;抛出异常处 noexcept&#xff1a;被修饰函数内部不会发生异常 允许抛出和捕捉各种类型的数据。 int main() {try{func();}catch(const char*e){ //捕捉字符…

计算机是怎么存储和识别人类高级语言的

目录 1、计算机是怎么“存储”人类的高级语言的&#xff1f;2、 UTF-8和UTF-32的区别3、UTF-8是如何区分字节的长度呢&#xff1f;&#xff08;即如何识别这一串二进制是多少个字节的&#xff1f;&#xff09;4、计算机是如何识别人类的高级语言的&#xff1f; 1、计算机是怎么…

idea如何开启多个客户端(一个代码开启多个客户端运行)

1.在编程界面UdpEchoClient的下拉列表中找到Edit Configurations...并点击 2.点击Modify options 3.点击Allow multiple instances将其勾选上 4.点击ok 在经历了以上的设置以后&#xff0c;再次运行客户端的程序便会创建一个新的客户端运行&#xff08;有了一个新的运行窗口&am…

【AI】《动手学-深度学习-PyTorch版》笔记(十四):多层感知机

AI学习目录汇总 1、多层感知机网络结构 1.1 线性模型:softmax回归 在前面介绍过,使用softmax回归来处理分类问题时,每个输出通过都一个仿射函数计算,网络结构如下,输入和输出之间为全链接层: 1.2 多层感知机 多层感知机就是在输入和输出中间再添加一个或多个全链接…

解数独(Java)

题目链接&#xff1a; 力扣 题目详情&#xff1a; 37. 解数独t编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只…

研发工程师玩转Kubernetes——使用emptyDir在同一Pod不同容器间共享数据

kubernets可以通过emptyDir实现在同一Pod的不同容器间共享文件系统。 正如它的名字&#xff0c;当Pod被创建时&#xff0c;emptyDir卷会被创建&#xff0c;这个时候它是一个空的文件夹&#xff1b;当Pod被删除时&#xff0c;emptyDir卷也会被永久删除。 同一Pod上不同容器之间…

【数据分析】pandas (三)

基本功能 在这里&#xff0c;我们将讨论pandas数据结构中常见的许多基本功能 让我们创建一些示例对象&#xff1a; index pd.date_range(“1/1/2000”, periods8) s pd.Series(np.random.randn(5), index[“a”, “b”, “c”, “d”, “e”]). df pd.DataFrame(np.random.…

BDA初级分析——界定问题

数据分析&#xff0c;从界定问题开始 一、界定问题的作用 如何从现有台式机企业客户中挑选出那些想购买服务器的企业客户&#xff1f; 问题中的陷阱&#xff0c;隐藏的假设条件 假设1: 在购买服务器的客户中&#xff0c;只有0.01%的客户是购买过公司台式机的客户&#xff0…

超详细的Linux基础命令

文章目录 前言Linux目录结构Linux命令通用格式ls 命令什么是工作目录什么是 HOME 目录 目录切换相关命令cd 命令pwd 命令 特殊的路径符创建目录文件操作相关命令touch 命令cat 命令more 命令cp 命令mv 命令rm 命令通配符 查找命令which 命令find 命令按文件名查找文件按文件大小…

无人驾驶实战-第十一课(控制理论)

在七月算法上报了《无人驾驶实战》课程&#xff0c;老师讲的真好。好记性不如烂笔头&#xff0c;记录一下学习内容。 课程入口&#xff0c;感兴趣的也可以跟着学一下。 ————————————————————————————————————————— 无人驾驶中控制系…

1、如何实现两台电脑之间数据相互读写

一、确保两台电脑在同一个局域网中&#xff0c;可以使用网线【动态配置】进行两台电脑互连。 二、静态配置: 将IP地址和网关设为192.168.0.1&#xff0c;目的是让这台电脑做另一台电脑的网关&#xff0c;子网掩码一点击会自动添加。第二台电脑同样打开设置&#xff0c;此处IP地…

[oeasy]python0082_[趣味拓展]控制序列_清屏_控制输出位置_2J

光标位置 回忆上次内容 上次了解了键盘演化的过程 ESC 从 组合键到 独立按键 ESC的作用 是 进入 控制序列配置 控制信息控制信息 \033[y;xH 设置光标位置\033[2J 清屏 这到底怎么控制&#xff1f;&#xff1f;&#xff1f;&#x1f914;谁来实现这些功能&#xff1f; 控制…