浅谈MySQL中的六种日志

下面是详细的MySQL日志攻略:

一、MySQL日志的作用

MySQL的日志是用来记录一些重要的操作或事件的记录。这些日志可以帮助数据库管理员了解数据库发生了那些事件以及在数据库运行时进行故障恢复。

二、MySQL中的六种日志

MySQL中共有六种日志:错误日志、慢查询日志、二进制日志、重做日志、查询日志和状态日志。接下来我们会对这些日志依次进行解释。

1. 错误日志

错误日志是MySQL服务器启动后会自动创建的,这个日志会记录MySQL服务器所发生的任何错误事件。这些错误事件包括MySQL服务器的启动、关闭、崩溃以及一些重要的系统和安全事件。如果MySQL服务器没有启动成功,错误日志是定位问题的最好方法。在CentOS系统下,错误日志的默认存储目录是/var/log/mysql/error.log。

以下是一个错误日志的示例:

2020-11-23T05:59:10.710350Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2020-11-23T05:59:10.710382Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.
2020-11-23T05:59:10.710387Z 0 [ERROR] InnoDB: Unable to open ./ib_logfile0
2020-11-23T05:59:10.710389Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-11-23T05:59:10.710392Z 0 [ERROR] Plugin 'InnoDB' init function returned error.

2. 慢查询日志

慢查询日志是记录查询所耗费的时间超过了某个阈值(默认为10秒)的所有查询语句的日志。可以用慢查询日志来发现一些查询效率低下、响应慢的问题,从而进行性能优化。在CentOS系统下,慢查询日志的默认存储目录是/var/log/mysql/mysql-slow.log。

以下是一个慢查询日志的示例:

# Time: 2020-11-27T09:31:33.496578Z
# User@Host: root[root] @ localhost []  Id:     1
# Query_time: 1.149131  Lock_time: 0.000184 Rows_sent: 2  Rows_examined: 1128725
SET timestamp=1606463493;
SELECT COUNT(*) as count, DATE_FORMAT(access_time, '%Y-%m-%d %H:%i:00') as date_hour FROM logs WHERE access_time BETWEEN '2020-11-27 00:00:00' AND '2020-11-27 23:59:59' GROUP BY DATE_FORMAT(access_time, '%Y-%m-%d %H:%i:00');

3. 二进制日志

二进制日志是MySQL高可用的重要组成部分,主要用于实现基于两阶段提交的多主合一、一主多从的复制方案和实现MySQL恢复。它记录的是客户端的所有更新SQL语句,并将其存储在名为二进制日志文件的磁盘文件中。可以用MySQL的复制技术,从一个主服务器上复制二进制日志到其他MySQL数据库服务器上来同步数据。

以下是一个二进制日志的示例:

。。。省略前面的一些内容。。。

#210606  3:38:10 server id 1  end_log_pos 11946 CRC32 0x3dbdcfd5    Query   thread_id=9 exec_time=0 error_code=0
SET TIMESTAMP=1622924290/*!*/;
BEGIN
/*!*/;
# at 11946
#210606  3:38:10 server id 1  end_log_pos 12009 CRC32 0xab15f1e9    Query   thread_id=9 exec_time=0 error_code=0
SET @@SESSION.GTID_NEXT= '0ddce2ff-5f3d-11eb-bbbb-00155d01c817:1'/*!*/;
# at 12009
#210606  3:38:10 server id 1  end_log_pos 12026 CRC32 0x08b89ca9    Query   thread_id=9 exec_time=0 error_code=0
SET @@SESSION.GTID_NEXT_LIST= '0ddce2ff-5f3d-11eb-bbbb-00155d01c817:1'/*!*/;
# at 12026
#210606  3:38:10 server id 1  end_log_pos 12111 CRC32 0x2668fb72    Query   thread_id=9 exec_time=0 error_code=0
SET @@SESSION.GTID_NEXT= '0ddce2ff-5f3d-11eb-bbbb-00155d01c817:2'/*!*/;
。。。省略后面的一些内容。。。

4. 重做日志(Redo Log)

重做日志也是MySQL高可用的重要组成部分,记录的是所有对索引数据所做的更改,以便在MySQL服务器崩溃后可以重新执行这些更改(也就是重做)。重做日志与二进制日志不同,它的作用是在MySQL服务器挂掉或者崩溃后恢复数据,而不是在进行数据复制。

以下是一个重做日志的示例:

InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5242880 bytes
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5242880 bytes
InnoDB: Database physically writes the file full: wait...
InnoDB: created 2 'ib_logfile' files.
InnoDB: 10.3.22 started; log sequence number 27755394; transaction id 249427
InnoDB: Logging buffer has been flushed ('''0%'''); log ''./ib_logfile0'' at position 0; transaction id 249427
InnoDB: Logging buffer has been flushed (''0%'''/%); log ''./ib_logfile0'' at position 4194304; transaction id 249427
InnoDB: is in the future! Current system log sequence number 27761315.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: for more information.

5. 查询日志

查询日志主要用于分析MySQL服务器的性能。它可以记录所有客户端对MySQL服务器的请求,记录的内容包括客户端发出请求的时间、请求的语句、响应时间、返回的行数等。在实际生产环境中,查询日志很少被启用,因为其会影响MySQL服务器的性能。

以下是一个查询日志的示例:

161027 22:10:32       2 Query       SET NAMES utf8
                  2 Init DB      test
161027 22:10:33       2 Query       SELECT COUNT(*) FROM bigtable WHERE priority > 10;
161027 22:10:40       2 Query       SELECT * FROM bigtable WHERE id = 1000000013;

6. 状态日志

状态日志是MySQL服务器用来记录服务器的当前状态的。它可以记录很多关于MySQL服务器运行时的信息,包括连接数、运行中的线程数、运行时使用的缓存等。有了状态日志,MySQL的管理员能够了解服务器的性能瓶颈,从而进行优化。

以下是一个状态日志的示例:

# Thread 139939971057408 has waited at btr0cur.cc line 496 for 104361.00 seconds the semaphore:
# Mutex at 0x7f4c12dbd350, Mutex CURSOR, lock var 2
# waiters flag 1
# wait_stack: 0x7f4c23c43258
# owner_thread: 0x7f4c2c5f7780, owner: 0x7f4c2c5f7780, own_event: 0x7f4c22d424d8
# holder_thread: 0x0, holder: 0x0, hold_event: 0x0
# this: 0x7f4c12dbf9d0, lock: 0x7f4c12dbe6d0, slots: 1024, waiters_len: 1, waiters: 0x7f4c0691c1c0

总结

以上就是MySQL中的六种日志,每个日志都有不同的作用,可以帮助管理员快速地定位问题,了解服务器的性能。在使用这些日志的时候,需要根据具体情况来选择不同的日志,并对日志进行细心的分析和处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈MySQL中的六种日志 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • MySql中执行计划如何来的——Optimizer Trace

    作者:京东物流 籍磊 1.前言 当谈到MySQL的执行计划时,会有很多同学想:“我就觉得使用其他的执行方案比EXPLAIN语句输出的方案强,凭什么优化器做的决定与我得不一样?”。这个问题在MySQL 5.6之前或许自己很难解决,但是现在MySQL5.6及更高的版本中引入了Optimizer Trace。 2.optimizer_trace开启方式及表结构 当…

    MySQL 2023年4月27日
    00
  • MySQL 大表的count()优化实现

    下面是“MySQL 大表的count()优化实现”的完整攻略。 1. 问题背景 在 MySQL 数据库中,COUNT() 是一个常用的聚合函数,用于统计表中记录的数量。然而,当表中记录数量巨大时,COUNT() 的执行效率会非常低下,甚至导致数据库宕机。因此,我们需要针对 MySQL 大表的 COUNT() 语句进行优化,提高查询效率。 2. 优化方法 2.…

    MySQL 2023年5月19日
    00
  • 解析MySQL中存储时间日期类型的选择问题

    解析MySQL中存储时间日期类型的选择问题需要考虑到多个方面,包括MySQL中支持的不同日期时间类型、存储时区的选择、使用函数进行日期时间计算等。下面是一个详细的攻略。 选择日期时间类型 在MySQL中,常用的日期时间类型有DATE、DATETIME、TIMESTAMP、TIME和YEAR。它们各自的特点如下: DATE:存储日期,格式为YYYY-MM-DD…

    MySQL 2023年5月19日
    00
  • phpMyAdmin链接MySql错误 个人解决方案

    针对“phpMyAdmin链接MySql错误”的问题,我会提供以下攻略: 问题描述 在使用phpMyAdmin链接MySql时,可能会出现链接错误的问题,例如: Cannot connect: Invalid settings – 配置无效 #2003 – Can’t connect to MySQL server on ‘localhost’ (10061…

    MySQL 2023年5月18日
    00
  • Navicat连接MySQL时报10060、1045错误及my.ini位置问题

    下面是详细讲解Navicat连接MySQL时报10060、1045错误及my.ini位置问题的完整攻略: 1. 问题描述 Navicat 连接 MySQL 数据库时,可能会出现以下两种错误: 错误10060:无法连接远程 MySQL 服务器。 错误1045:无法连接 MySQL 服务器。 同时还会涉及到 my.ini 配置文件位置问题。 2. 解决步骤 2.…

    MySQL 2023年5月18日
    00
  • 数据库测试指南

    为什么要测试数据库? 数据映射 在软件系统中,数据经常从UI(用户界面)到后端数据库之间来回穿梭,反之亦然。因此,这些是需要注意的一些方面: 检查用户界面/前端表单中的字段是否与数据库表中的相应字段有一致的映射。 通常情况下,这种映射信息在需求文件中被定义。 每当在应用程序的前端执行某个动作时,相应的CRUD(创建、检索、更新和删除)动作会在后端被调用。测试…

    MySQL 2023年4月18日
    00
  • egg实现登录鉴权(二):连接数据库(mysql)

    前一篇实现了基本的生成token和验证token的功能,这其实并没什么用。这一篇主要实现对数据库里的人员进行验证。 需求 登录:查询数据库的user表验证该人员是否存在 user表中存在该nickname,生成token返回 user表中不存在该nickname,返回{code:’404′,msg:’不存在该人员’} 查询 查询所有user,无需传token…

    MySQL 2023年4月13日
    00
  • MySQL 之 索引原理与慢查询优化

    1. 索引介绍 需求:   一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 索引:    简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容.    在MySQL中也…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部