iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql - 日志
  • 808
分享到

Mysql - 日志

mysql数据库java 2023-09-03 17:09:18 808人浏览 薄情痞子
摘要

目录 Mysql日志: Mysql日志是什么,有什么用? 一、重做日志(redo log),回滚日志(undo log)的简单介绍 二、Mysql错误日志:(默认是开启的) 作用: 当然我们也可以自己配置error log的位置(配置文件路

目录

Mysql日志:

Mysql日志是什么,有什么用?

一、重做日志(redo log),回滚日志(undo log)的简单介绍

二、Mysql错误日志:(默认是开启的)

作用:

当然我们也可以自己配置error log的位置(配置文件路径:/etc/my.cnf)

三、Mysql的慢日志:(默认是关闭的)

作用:

可以很明显的看到,我们的Mysql慢日志是关闭的,所以当我们想要打开时,我们应该在Mysql的配置文件里进行修改:

但是为什么Mysql默认情况下没有打开慢日志呢?

四、Mysql的通用日志:(默认是关闭的)

作用:

我们如何打开Mysql的通用日志呢,我们应该与上面的慢日志一样,修改mysqld的配置文件

但是为什么Mysql默认情况下没有打开通用日志呢?

五、Mysql的二进制日志:(默认是关闭的)(很重要,有机密信息的记录)

作用:

二进制文件是如何产生的呢?

Mysql实例:

如何开启二进制日志文件呢?

什么时候会产生新的二进制日志文件呢?

我们又是如何知道我们现在正在使用哪个二进制日志文件呢:(通过show master status;命令)

我们可以通过show binary logs 查看所有二进制日志文件的大小

我们又是如何删除所有的二进制日志文件呢:(使用reset master)

如何手动清除二进制日志文件呢:(purge binary log 命令)

 参考文档:(13条消息) MySql自动清除binary logs日志_purge binary logs_hanchao5272的博客-CSDN博客

查看二进制日志:

我们可以使用mysqlbinlog命令:

参考文档:MySQL 数据库之Binlog日志使用总结 - 散尽浮华 - 博客园 (cnblogs.com)

MySQL的binlog日志 - 马丁传奇 - 博客园 (cnblogs.com)​​​​​​​

二进制日志文件的格式

二进制日志的格式:

1、row level

2、statement level

3、mixed level


Mysql日志

mysql日志是什么,有什么用?

Mysql日志是MySQL数据库中记录各种事件和操作的文件(应用程序把工作过程中的事情记录下来保存到文件中,保存下来的东西就是日志)。它包括多种不同类型的日志文件,如二进制日志、错误日志、慢查询日志等。这些日志文件可以用于诊断和解决问题,例如查找错误、分析数据库性能、恢复数据等。

可以帮助我们了解程序是否正常运行,用来排错,数据分析

Mysql有很多类型的日志,如果按照组件划分的话,可以分为 服务层日志存储引擎层日志

服务层日志:二进制日志、慢日志、通用日志、错误日志

存储引擎层日志:Innodb(重做日志、回滚日志)

日志文件存放需要考虑空间问题:最好是单独分区(避免空间被耗光),不要和数据目录放在一起。

一、重做日志(redo log),回滚日志(undo log)的简单介绍

重做日志(redo log)是数据库系统中一种记录数据修改操作的日志,它记录了所有的事务提交操作,以便在数据库发生故障时,能够恢复数据库的一致性。当数据库崩溃或者发生意外关机等异常情况时,通过重做日志可以恢复数据库的数据。

回滚日志(undo log)是一种记录数据修改操作的日志,它记录了事务执行中所有的变更操作,以便在事务回滚时能够撤销这些操作。当事务执行失败或者被回滚时,通过回滚日志可以将事务执行前的数据状态恢复。回滚日志也可以用于实现多版本并发控制(mvcC)等功能。

详细可以查看参考文档:(13条消息) mysql 日志回滚_MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结..._昆宇的博客-CSDN博客

查看Mysql页的大小:(大概16K左右)

二、Mysql错误日志:(默认是开启的)

作用:

MySQL错误日志记录了MySQL服务运行过程中发生的错误、警告和其他信息,包括但不限于以下内容:

  1. 启动和关闭MySQL服务时的信息;
  2. 客户端连接MySQL服务的成功或失败信息;
  3. MySQL服务运行过程中发生的错误信息;
  4. MySQL服务运行过程中发生的警告信息;
  5. MySQL服务运行过程中发生的其他一些信息。

MySQL错误日志的作用主要有以下几个方面:

  1. 提供MySQL服务运行过程中的重要信息,帮助管理员及时发现和解决问题;
  2. 收集MySQL服务运行过程中的错误和警告信息,为后续的故障排查和优化提供依据;
  3. 记录MySQL服务运行过程中的详细信息,帮助管理员了解MySQL服务的运行状况和性能情况;
  4. 通过分析MySQL错误日志,可以发现一些安全问题,如未授权访问、恶意攻击等。

Mysql错误日志路径默认会存放在/data目录下  --》 存放在数据目录下

名字是 : 主机名.err

当然我们也可以自己配置error log的位置(配置文件路径:/etc/my.cnf)

如上图所示,我们通过在配置文件里添加log-error命令,指定Mysql错误日志的路径和文件,接下来我们需要刷新Mysql服务

成功配置了我们的Mysql错误日志的路径啦

我们也可以通过SQL命令查看我们的error日志的路径

三、Mysql的慢日志:(默认是关闭的)

作用:

MySQL慢日志用于记录执行时间超过一定阈值的SQL语句,可以帮助开发人员和DBA分析和优化慢查询,提高数据库性能。慢日志可以记录SQL语句的执行时间、执行次数、执行位置、执行用户等信息,通过分析慢日志可以发现哪些SQL语句执行时间较长,哪些SQL语句执行次数较多,哪些SQL语句需要优化等,从而进行针对性的优化,提高数据库的性能和稳定性。

我们可以通过SQL命令查看阈值(默认是10毫秒,如果一条SQL语句执行的时间超过了10毫秒,那么就算一条慢SQL语句,会产生慢日志)

我们可以查看我们的Mysql慢日志是否打开,命令如下:

可以很明显的看到,我们的Mysql慢日志是关闭的,所以当我们想要打开时,我们应该在Mysql的配置文件里进行修改:

我们在mysqld里面添加了slow_query_log = 1 表示打开Mysql的慢日志,而long_query_log 表示设置慢日志的阈值的大小。

修改配置文件后需要刷新mysqld服务

 

我们再检查我们的Mysql慢日志是否打开了(下图所示,已经打开了,路径也显示出来了)

我们通过tail -f命令动态查看Mysql的慢日志

但是为什么Mysql默认情况下没有打开慢日志呢?

Mysql默认情况下没有打开慢日志,主要是因为慢日志可能会对数据库的性能产生一定的影响。当开启慢日志时,Mysql需要在每次执行语句时判断是否超过了慢日志的阈值,这会增加额外的计算和存储开销。此外,如果慢日志记录的数据量过大,也会占用大量的磁盘空间,进一步影响数据库性能。因此,开启慢日志需要在保证数据库性能的前提下进行,需要根据实际需求进行设置。

四、Mysql的通用日志:(默认是关闭的)

作用:

MySQL通用日志是MySQL服务器的一种日志文件,它可以记录所有的客户端连接(Mysql连接)和所用的查询操作,包括查询语句select、执行时间time、返回结果等信息。通用查询日志的作用包括以下几个方面:

  1. 审计数据库操作:通用查询日志可以记录所有的数据库操作,包括增删改查等操作,可以帮助管理员监控和审计数据库的使用情况,发现异常操作和安全问题。

  2. 优化SQL语句:通用查询日志可以记录SQL查询语句的执行时间和返回结果等信息,可以帮助开发人员优化SQL语句的性能,提高数据库的查询效率。

  3. 故障排查:通用查询日志可以记录数据库操作的详细信息,包括错误信息和异常情况,可以帮助管理员快速定位和解决故障问题。

  4. 监控数据库性能:通用查询日志可以记录数据库的性能指标,如查询次数、响应时间等,可以帮助管理员监控数据库的性能状况,及时发现并解决性能问题。

总之,通用查询日志是MySQL服务器非常重要的一种日志文件,能够提供丰富的信息和数据,帮助管理员和开发人员更好地管理和维护MySQL数据库。

我们可以SQL命令查看我们的通用日志是否打开了

我们如何打开Mysql的通用日志呢,我们应该与上面的慢日志一样,修改mysqld的配置文件

我们直接在配置文件里添加general_log就可以打开我们的通用日志了

记得修改配置文件后需要刷新mysqld服务

我们再次检查是否打开了通用日志

上图所示,我们打开了通用日志啦。

我们通过tail -f命令动态查看Mysql的通用日志

但是为什么Mysql默认情况下没有打开通用日志呢?

MySQL默认情况下没有打开通用日志是因为开启通用查询日志会导致MySQL的性能下降,并且占用大量的磁盘空间。通用日志记录了所有的查询语句,包括SELECT、INSERT、UPDATE、DELETE等所有的操作,因此会产生大量的日志信息,对于大型的数据库系统来说,这些日志信息可能会非常庞大,因此默认情况下MySQL并不会开启通用查询日志。如果需要使用通用日志,需要根据具体的需求手动开启,并且需要注意日志文件的大小和定期清理日志文件。

缺点:消耗大量的磁盘空间、消耗cpu、内存、磁盘资源

优点:审计、会记录所有的SQL操作

五、Mysql的二进制日志:(默认是关闭的)(很重要,有机密信息的记录)

作用:

MySQL二进制日志(Binary Log)记录了所有对MySQL数据库进行的修改操作,包括插入、更新、删除等操作。它的作用主要有以下几个方面:

  1. 数据备份与恢复:二进制日志可以用于数据备份,通过将二进制日志备份到另一台服务器上,可以在主服务器出现问题时快速恢复数据。

  2. 数据复制:通过将主服务器的二进制日志复制到从服务器上,可以实现数据同步,将主服务器上的数据复制到从服务器上,从而提高系统的可用性和可靠性。

  3. 数据恢复:二进制日志可以用于数据恢复,通过回放二进制日志中的操作,可以将数据库恢复到指定的时间点。

  4. 数据审计:二进制日志可以用于数据审计,通过分析二进制日志,可以了解数据库中的数据修改历史,从而帮助管理员发现潜在的问题。

总之,二进制日志是MySQL数据库中非常重要的组成部分,它为数据备份、数据同步、数据恢复和数据审计等方面提供了强大的支持。

并且我们的二进制日志文件里存放的是二进制的数据,因此我们不能使用tail、head、cat命令去查看,但是可以使用mysqlbinlog这个工具去查看

而且我们的二进制日志文件记录了整个Mysql进程里的所有操作,所有库所有表的操作,

但是如果我们需要记录到不同的日志文件里,那我们可以采用多实例。

二进制文件是如何产生的呢?

 

二进制文件的产生过程,因为有事件出现(insert等),让后将事件commit到log Buffer日志缓存池里面(在mysql内存中),然后再提交到os的缓存池里面去(操作系统的内存),最后通过fsync()函数写入磁盘中。

Mysql实例:

一个正在运行的一个mysql的进程,这个进程可以由哪些库可以操作,二进制日志就记录哪些库的操作。

Mysql的多实例:

        多启用几个mysqld的进程,一个mysqld进程对应一个库

        隔离应用,避免一个库使用的特别频繁,从而影响其他的库

        但是多实例任然受到整个机器整体系统的资源限制。

在创建MySQL实例时,需要指定以下参数:

  1. 端口号:用于客户端连接MySQL服务器的端口号。
  2. 数据目录:MySQL实例存储数据的目录。
  3. 配置文件:包含MySQL实例的配置选项,如缓存大小、最大连接数等。

多实例的替换方案:我们可以使用云服务器,可以增加系统的新能,从而替代Mysql多实例的使用

我们可以SQL命令查看我们的二进制日志是否打开了

我们可以查看二进制日志的大小:(大约1G)(默认一个二进制文件最大只能一个1G)

如何开启二进制日志文件呢?

我们通过在mysql配置文件里添加如下命令:

修改Mysql配置文件后需要刷新mysqld服务

我们再次检查是否打开了二进制日志

我们的Mysql数据文件夹里也出现了二进制日志文件了(mysql-bin.000001)(我们每次刷新Mysql的服务,他就会重新产生二进制日志文件mysql-bin.000002往后按顺序排下去)

什么时候会产生新的二进制日志文件呢?

Mysql会在以下情况下产生新的二进制日志文件:

  1. 当前二进制日志文件大小超过了max_binlog_size参数设置的大小限制;
  2. 当前二进制日志文件的写入时间超过了max_binlog_time参数设置的时间限制;
  3. 手动执行flush logs语句。(刷新日志文件的时候,产生新的二进制日志文件)
  4. 当我们刷新Mysql服务的时候(service mysqld restart)

mysql-bin.index会记录我们一共由多少个二进制日志文件。 

我们又是如何知道我们现在正在使用哪个二进制日志文件呢:(通过show master status;命令)

我们可以通过show binary logs 查看所有二进制日志文件的大小

我们又是如何删除所有的二进制日志文件呢:(使用reset master)

如何手动清除二进制日志文件呢:(purge binary log 命令)

 参考文档:(13条消息) MySql自动清除binary logs日志_purge binary logs_hanchao5272的博客-CSDN博客

如下图所示,我们使用 purge binary logs to 'mysql-bin.000003';删除了mysql-bin.000003之前的所有二进制日志文件(不包括mysql-bin.000003日志文件)

 

我们可以设置自动清除日志文件:

通过改变 expire_logs_days 的大小,可以设置过几天时间自动清除二进制日志文件(默认为0表示日志文件永不过期,永不清除)

设置改变expire_logs_days的大小,设置日志文件自动清除的日期。

 

我们在Mysql的配置文件里添加了 expire_logs_days = 7  表示二进制日志文件过 7天 自动清除

 修改Mysql配置文件后需要刷新mysqld服务

我们再次检查是否打开自动清除二进制日志文件的配置

查看二进制日志:

我们可以使用mysqlbinlog命令:

mysqlbinlog命令的常用选项包括:

  • -h:指定MySQL服务器的主机名或IP地址。
  • -u:指定连接MySQL服务器的用户名。
  • -p:提示输入连接MySQL服务器的密码。
  • -t:在输出中包含时间戳。
  • -v:将二进制日志文件转换为可读的文本格式,可以输出更详细的信息。
  • -vv:信息更加的多
  • --base64-output=decode-rows:将ROW事件的内容以Base64格式输出。
  • --database=db_name:只输出指定数据库的日志。
  • --start-datetime=datetime:从指定的日期时间开始输出日志。(根据时间点进行备份)
  • --stop-datetime=datetime:在指定的日期时间停止输出日志。
  • --start-position=pos:从指定的日志位置开始输出日志。(根据位置号进行备份)
  • --stop-position=pos:在指定的日志位置停止输出日志。
  • --no-defaults:不使用默认的配置文件。
  • --verbose:输出更详细的信息。
  • --help:显示帮助信息。

参考文档:​​​​​​​MySQL 数据库之Binlog日志使用总结 - 散尽浮华 - 博客园 (cnblogs.com)

MySQL的binlog日志 - 马丁传奇 - 博客园 (cnblogs.com)​​​​​​​

二进制日志文件的格式

参考文档:MySQL之二进制日志 - Yuki_xiong - 博客园 (cnblogs.com)

二进制日志的格式:

1、row level

2、statement level

3、mixed level

1、row level

说明: 记录操作的每一行数据

记录操作的每一行数据  --》表里的哪些行的数据发生了变化

优点:

  • 相比statement更加安全的复制格式
  • 系统的特殊函数也可以复制
  • 更少的
  • 数据一致性高

缺点:

  • binlog 文件会比较大
  • 无法从binlog中看见用户执行的SQL
  • 每个表最好都要有一个主键

 从mysql5.7之后,默认的格式为Row格式

我们可以通过查看show variables like 'binlog_fORMat';来查看二进制日志文件的格式

2、statement level

说明:基于语句的,记录操作的sql语句

优点:

  • binlog文件大小较小
  • 易于理解,方便阅读
  • 日志中包含原始SQL,方便统计和审计

缺点:

  • 存在安全隐患,可能导致主从不一致
  • 对一些系统函数不能复制,比如sysdate,uuid等
  • 不支持不确定的SQL语句

3、mixed level

说明:混合使用Row和Statement格式,对DDL记录会使用Statement,对于table里的行操作会记录Row格式

如果是Innodb表,事务级别为Read committed 或者 read uncommitted日志级别只能使用Row格式

(一般不推荐使用Mixed格式)

来源地址:https://blog.csdn.net/lpfstudy/article/details/130364375

您可能感兴趣的文档:

--结束END--

本文标题: Mysql - 日志

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql - 日志
    目录 Mysql日志: Mysql日志是什么,有什么用? 一、重做日志(redo log),回滚日志(undo log)的简单介绍 二、Mysql错误日志:(默认是开启的) 作用: 当然我们也可以自己配置error log的位置(配置文件路...
    99+
    2023-09-03
    mysql 数据库 java
  • 【mysql】binlog日志
    目录 1.1 基本说明1.2 binlog日志格式1.3 binlog日志查看1.4 binlog日志删除1.5 binlog操作示例 1.1 基本说明 1....
    99+
    2023-09-01
    mysql 数据库 sql
  • MySQL(3)——日志
    MySQL数据库的并发性与锁有很大的关系:读锁:    是共享锁,施加后,其他人可以读,但是不能写。写锁:    是独占锁,施加后,其他人不能写、也不能读。    由于数据库的读量大于写量,所以当读锁源源不断时,写锁就不能施加。所以可能采用...
    99+
    2023-01-31
    日志 MySQL
  • MySQL三大日志
    MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log:是Innodb存储引擎生成的日...
    99+
    2023-09-14
    mysql 数据库 redo log undo log bin log
  • MySQL——innodb日志管理
    innodb日志管理机制:1、innodb存储引擎是支持事务ACID特性的,这个理论基本就是一个关系型数据库相关的数据恢复原形设计,包括日志、回滚、redo、并发控制、buffer pool等管理方面,内容...
    99+
    2024-04-02
  • MySQL慢查询日志
    笔记内容:MySQL慢查询日志 笔记日期:2017-12-10 <br> MySQL日志文件系统的组成 通用查询日志 慢查询日志 和大多数关系型数据库一样,日志文件是MySQL数据库的重要...
    99+
    2024-04-02
  • MySQL有几种日志
    这篇文章将为大家详细讲解有关MySQL有几种日志,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 MySQL主要的日志文件有以下几种。错误日志 ...
    99+
    2024-04-02
  • MySQL日志怎么看
    这篇文章主要为大家展示了“MySQL日志怎么看”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL日志怎么看”这篇文章吧。在 MySQL 中, 要设置某个字...
    99+
    2024-04-02
  • mysql如何关闭日志
    这篇文章给大家分享的是有关mysql如何关闭日志的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 mysql关闭日志的方法:1、在mysql的配置文件中...
    99+
    2024-04-02
  • 开启MySQL的binlog日志
    1.判断MySQL是否已经开启binlog SHOW VARIABLES LIKE 'log_bin'; 查看MySQL的binlog模式  show global variables like "binlog%"; 几个...
    99+
    2023-10-23
    mysql 数据库
  • Mysql之binlog日志浅析
    一、binlog日志简介   Binlog是MySQL数据库中的二进制日志,用于记录数据库中所有修改操作,包括增删改等操作。binlog以二进制格式保存,可以通过解析binlog文件来查看数据库的操作...
    99+
    2023-09-23
    mysql binlog 数据库 binlog日志 三种日志模式
  • 如何查看mysql日志
    本篇文章给大家分享的是有关如何查看mysql日志,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何查看mysql日志mysql有以下几种日志:...
    99+
    2024-04-02
  • mysql怎么刷新日志
    在mysql中刷新日志的方法首先,在命令行中启动MySQL服务;service mysql start  MySQL服务启动后,在命令行中输入mysql的用户名和密码登录到mysql;mysql -u root -p登录到mysql后,选择...
    99+
    2024-04-02
  • mysql怎么清空日志
    在mysql中清空日志的方法首先,在命令行中启动mysql服务;service mysql start  MySQL服务启动后,在命令行中输入mysql的用户名和密码登录到mysql;mysql -u root -p登录到mysql后,选择...
    99+
    2024-04-02
  • mysql怎么打开日志
    在mysql中开启日志的方法首先,在命令行中启动mysql服务;service mysql start  MySQL服务启动后,在命令行中输入mysql的用户名和密码登录到mysql;mysql -u root -p登录到mysql后,选择...
    99+
    2024-04-02
  • mysql如何清除日志
    这篇文章主要介绍mysql如何清除日志,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在mysql中,可以利用purge命令清除日志,该命令用于清除指定的...
    99+
    2024-04-02
  • mysql .log是什么日志
    mysql .log是指二进制日志文件,它是MySQL数据库引擎记录所有数据库更改操作的日志文件,其作用有:1、数据恢复,可以将数据库还原到特定时间点之前的状态,从而实现数据恢复;2、主从复制,主服务器将生成并写入二进制日志文件,然后从服务...
    99+
    2023-07-25
  • Mysql 5.7开启binlog日志
    Mysql 5.7开启binlog日志 前言 binlog是MySQL的二进制日志,并且是MySQL中最重要的日志。binlog记录了对MySQL数据库执行更改的所有操作,包括对数据库表结构的变更,对数据的变更,例如CREATE、ALT...
    99+
    2023-08-16
    mysql 数据库 sql
  • mysql 日志分类详解
    前言 对于IT从业人员来说,日志是日常开发和问题排查过程中非常重要的信息,通过日志可以了解到很多有用的信息,很多奇怪的不好定位的问题,往往可以通过分析日志找到答案。 在mysql中,也提供了多种类型的日志,不同类型的日志其作用也不一样,本...
    99+
    2023-10-05
    mysql日志 mysql慢查询日志 mysql日志总结 mysql各类日志 mysql日志使用说明
  • MySQL错误日志与通用查询日志图文详析
    目录MySQL日志文件系统的组成启动错误日志查看错误日志删除错误日志通用查询日志删除通用查询日志通用查询日志的备份 总结MySQL日志文件系统的组成   &nbs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作