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

目录

常见日志级别 

数据库日志

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.rhkb.cn/news/82705.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[保研/考研机试] 约瑟夫问题No.2 C++实现

题目要求&#xff1a; 输入、输出样例&#xff1a; 源代码&#xff1a; #include<iostream> #include<queue> #include<vector> using namespace std;//例题5.2 约瑟夫问题No.2 int main() {int n, p, m;while (cin >> n >> p >> m) {//如…

业务中如何过滤敏感词

在我们访问网站的时候&#xff0c;如果发现我们发布的内容有色情暴力的东西等等&#xff0c;会屏蔽掉&#xff0c;这种行为就是过滤敏感词。 从技术层面实现起来&#xff0c;其实比较简单&#xff0c;因为我们输入的内容就是一个大型的字符串&#xff0c;我们要调用某些api来判…

ESP32开发阶段启用 Secure Boot 与 Flash encryption

Secure Boot 与 Flash encryption详情 请参考&#xff1a;https://blog.csdn.net/espressif/article/details/79362094 1、开发环境 AT版本&#xff1a;2.4.0.0 发布IDF 与 python&#xff1a; idf4.3_py3.10_env系统&#xff1a;虚拟机 ubuntu 20 2、使能 secure boot 和 …

【动态规划刷题 6】 删除并获得点数 粉刷房子

740. 删除并获得点数 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。…

list模拟实现【引入反向迭代器】

文章目录 1.适配器1.1传统意义上的适配器1.2语言里的适配器1.3理解 2.list模拟实现【注意看反向迭代器】2.1 list_frame.h2.2riterator.h2.3list.h2.4 vector.h2.5test.cpp 3.反向迭代器的应用1.使用要求2.迭代器的分类 1.适配器 1.1传统意义上的适配器 1.2语言里的适配器 容…

实现链式队列

dl.h dl.c main.c 结果

BM5 合并k个已排序的链表 javascript

描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围&#xff1a; 示例1 输入&#xff1a; [{1,2,3},{4,5,6,7}] 返回值&#xff1a; {1,2,3,4,5,6,7}示例2 输入&#xff1a; [{1,2},{1,4,5},{6}] 返回值&#xff1a; {1,1,2,4,5,6}解题思路 利用两个…

RabbitMQ 发布确认机制

发布确认模式是避免消息由生产者到RabbitMQ消息丢失的一种手段 发布确认模式 原理说明实现方式开启confirm&#xff08;确认&#xff09;模式阻塞确认异步确认 总结 原理说明 生产者通过调用channel.confirmSelect方法将信道设置为confirm模式&#xff0c;之后RabbitMQ会返回Co…

spring 面试题

一、Spring面试题 专题部分 1.1、什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量…

Unity之ShaderGraph 节点介绍 Utility节点

Utility 逻辑All&#xff08;所有分量都不为零&#xff0c;返回 true&#xff09;Any&#xff08;任何分量不为零&#xff0c;返回 true&#xff09;And&#xff08;A 和 B 均为 true&#xff09;Branch&#xff08;动态分支&#xff09;Comparison&#xff08;两个输入值 A 和…

未来C#上位机软件发展趋势

C#上位机软件迎来新的发展机遇。随着工业自动化的快速发展&#xff0c;C#作为一种流行的编程语言在上位机软件领域发挥着重要作用。未来&#xff0c;C#上位机软件可能会朝着以下几个方向发展&#xff1a; 1.智能化&#xff1a;随着人工智能技术的不断演进&#xff0c;C#上位机…

中间件RabbitMQ消息队列介绍

1. MQ的相关概念 1.1 什么是MQ MQ&#xff08;message queue&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息…

手机开启应急预警通知 / 地震预警

前言 安卓手机在检测到地震时&#xff0c;将发送地震预警通知&#xff0c;但此设置是默认关闭的&#xff0c;原因是以防引发用户恐慌从而引发安全问题&#xff0c;且开启此设置需要完成指引教程&#xff0c;因此默认关闭此设置。下文介绍如何开启此设置。 开启方法 华为手机开…

nginx简介与安装配置,目录结构和配置文件介绍

一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 &#xff08;1&#xff09;下载扩展源 &#xff08;2&#xff09;安装扩展rpm包&#xff0c;nginx -V查看配置参数&#xff0c;后面源码安装时要用到 2.源码方式 &#xff08;1&#xff09;建议提前下好所需要的部…

github pages 用法详解 发布自己的网站

github pages 基础用法 URL 规则 假设你的 github 帐号为 mygithub&#xff0c;需要发布的仓库名为 myrepo&#xff0c;那么 pages 的 URL 为&#xff1a; https://mygithub.github.io/myrepo 添加内容 用任意编辑器写好&#xff08;或者生成&#xff09;标准的网页内容&a…

Windows安装Redis

自己电脑做个测试&#xff0c;需要用到Redis&#xff0c;把安装过程记录下&#xff0c;方便有需要的人 1、找到下载地址&#xff1a;Releases microsoftarchive/redis GitHub Windows的Redis需要到GitHub上下载&#xff1a; 2、下载完后设置密码&#xff0c;打开文件夹&…

Linux下TCP网络服务器与客户端通信程序入门

文章目录 目标服务器与客户端通信流程TCP服务器代码TCP客户端代码 目标 实现客户端连接服务器&#xff0c;通过终端窗口发送信息给服务器端&#xff0c;服务器接收到信息后对信息数据进行回传&#xff0c;客户端读取回传信息并返回。 服务器与客户端通信流程 TCP服务器代码 …

车云一体化系统基础理论

车云一体化系统基础理论 介绍目标正文 参考文档 介绍 最近在调研车云链路一体化的整套解决方案&#xff0c;涉及分布式消息队列&#xff08;RocketMQ&#xff09;、分布式存储&#xff08;Doris&#xff09;、离线数据处理&#xff08;Spark&#xff09;、用户行为日志分析&am…

性能测试浅谈

早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程&#xff0c;如上图。 数据传输时间 当你从浏览器输入网址&#xff0c;敲下回车&#xff0c;开始... 真实的用户场景请不要忽视数据传输时间&#xff0c;想想你给远方的朋友写信&#xff0c;信件…

【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台

吃完快餐粥&#xff0c;除了粥的味道不错之外&#xff0c;我对个快餐盒的圆盖子产生了兴趣&#xff0c;能否做个极低成本的简易机器人呢&#xff1f;也许只需要二十元左右 知识点&#xff1a;轮子&#xff08;wheel&#xff09; 中国词语。是用不同材料制成的圆形滚动物体。简…