浅谈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日

相关文章

  • 不同于Oracle:MySQL的insert会阻塞update

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者: 王庆勋 文章来源:GreatSQL社区原创 某银行客户在从Oracle迁移到MySQL的开发中,MySQL在READ-COMMITTED隔离级别下,出现了insert阻塞update的情况,但同样的情况下…

    MySQL 2023年4月18日
    00
  • 详解Mysql和Oracle之间的误区

    详解Mysql和Oracle之间的误区 误区一:Mysql和Oracle没有区别 很多人认为Mysql和Oracle没有什么区别,都是关系型数据库,提供同样的功能。实际上,Mysql和Oracle在很多方面都有很大的区别。 例子一:代码兼容性 Mysql和Oracle的代码不完全兼容,具有不同的语法规则和函数。例如,Mysql中使用LIMIT语句来限制数据行…

    MySQL 2023年5月18日
    00
  • MySQL——简介和安装

    1.1、MySQL简介 MySQL是一个关系型数据库管理系统 前世:瑞典MySQL AB 公司 今生:属于 Oracle 旗下产品 MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,并且开源!。 优点:体积小、速度快、总体拥有成本低,招人成本比较低,所有人必须会~…

    MySQL 2023年4月12日
    00
  • MySQL之数据表的插入内容 空与非空(六)

    NULL与NOT NULL mysql> CREATE TABLE tb2( -> usename VARCHAR(20) NOT NULL, -> age TINYINT UNSIGNED NULL(可以为空) -> );Query OK, 0 rows affected (0.06 sec) mysql> SHOW COLU…

    MySQL 2023年4月16日
    00
  • mysql插入记录INSERT与多表更新

    1、第一种:INSERT [INTO] tbl_name[ (col_name, … ) ]  {VALUES | VALUE}({expr |default}, … ), (…), … 如果为自动编号的字段赋值的话,可以采用NULL或者DEFAULT让其采用默认的递增的形式来实现。 INSERT users VALUES(DEFAULT, …

    MySQL 2023年4月16日
    00
  • MySQL limit性能分析与优化

    MySQL的limit是一种非常常用的限制查询结果的方法,但是当limit条件设置较大时,可能会导致查询效率比较低下。因此针对limit可能存在性能问题,需要进行性能分析与优化的工作。 以下是“MySQL limit性能分析与优化”的完整攻略: 1.性能分析 1.1 查询分析 优化limit查询的第一步是明确查询语句的具体执行情况。可以使用EXPLAIN命令…

    MySQL 2023年5月19日
    00
  • mysql基础

    SQL语句 SQL语句分类 SQL分类: 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,upd…

    MySQL 2023年4月27日
    00
  • MySQL与Java常用数据类型的对应关系

    一、字符串数据类型: MySQL类型名 大小 用途 对应Java类名 char 0-255 bytes 定长字符串 (姓名、性别、学号) String varchar 0-65535 bytes 变长字符串(比上面更长一点的那种) String tinytext 0-255 bytes 比较短的那种文本数据(新闻速报的那种) String mediumtex…

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