mysql的几种日志记录

作者&投稿:拔启 (若有异议请与网页底部的电邮联系)
~

重做日志(redo log)
作用:

确保事务的持久性。

防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。

内容:

物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。

什么时候产生:

事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo log文件中。

什么时候释放:

当对应事务的脏页写入到磁盘之后,redo log的使命也就完成了,重做日志占用的空间就可以重用(被覆盖)。

对应的物理文件:

默认情况下,对应的物理文件位于数据库的data目录下的ib_logfile1&ib_logfile2

innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下。

innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认2

关于文件的大小和数量,由一下两个参数配置:

innodb_log_file_size 重做日志文件的大小。

innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认1

其他:

很重要一点,redo log是什么时候写盘的?前面说了是在事物开始之后逐步写盘的。

之所以说重做日志是在事务开始之后逐步写入重做日志文件,而不一定是事务提交才写入重做日志缓存,

原因就是,重做日志有一个缓存区Innodb_log_buffer,Innodb_log_buffer的默认大小为8M(这里设置的16M),Innodb存储引擎先将重做日志写入innodb_log_buffer中。

回滚日志(undo log)
作用:

保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读

内容:

逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于redo log的。

什么时候产生:

事务开始之前,将当前是的版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性

什么时候释放:

当事务提交之后,undo log并不能立马被删除,

而是放入待清理的链表,由purge线程判断是否由其他事务在使用undo段中表的上一个事务之前的版本信息,决定是否可以清理undo log的日志空间。

对应的物理文件:

MySQL5.6之前,undo表空间位于共享表空间的回滚段中,共享表空间的默认的名称是ibdata,位于数据文件目录中。

MySQL5.6之后,undo表空间可以配置成独立的文件,但是提前需要在配置文件中配置,完成数据库初始化后生效且不可改变undo log文件的个数

如果初始化数据库之前没有进行相关配置,那么就无法配置成独立的表空间了。

关于MySQL5.7之后的独立undo 表空间配置参数如下

innodb_undo_directory = /data/undospace/ --undo独立表空间的存放目录

innodb_undo_logs = 128 --回滚段为128KB

innodb_undo_tablespaces = 4 --指定有4个undo log文件

二进制日志(binlog):
作用:

用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。

用于数据库的基于时间点的还原。

内容:

逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句。

但又不完全是sql语句这么简单,而是包括了执行的sql语句(增删改)反向的信息,也就意味着delete对应着delete本身和其反向的insert;update对应着update执行前后的版本的信息;insert对应着delete和insert本身的信息。

在使用mysqlbinlog解析binlog之后一些都会真相大白。

因此可以基于binlog做到类似于oracle的闪回功能,其实都是依赖于binlog中的日志记录。

什么时候产生:

事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中。

这里与redo log很明显的差异就是redo log并不一定是在事务提交的时候刷新到磁盘,redo log是在事务开始之后就开始逐步写入磁盘。

因此对于事务的提交,即便是较大的事务,提交(commit)都是很快的,但是在开启了bin_log的情况下,对于较大事务的提交,可能会变得比较慢一些。

这是因为binlog是在事务提交的时候一次性写入的造成的,这些可以通过测试验证。

什么时候释放:

binlog的默认是保持时间由参数expire_logs_days配置,也就是说对于非活动的日志文件,在生成时间超过expire_logs_days配置的天数之后,会被自动删除。

对应的物理文件:

配置文件的路径为log_bin_basename,binlog日志文件按照指定大小,当日志文件达到指定的最大的大小之后,进行滚动更新,生成新的日志文件。

对于每个binlog日志文件,通过一个统一的index文件来组织。

慢查询日志:
慢日志记录执行时间过长和没有使用索引的查询语句,报错select、update、delete以及insert语句,慢日志只会记录执行成功的语句。
查看慢查询时间:
show variables like “long_query_time”;默认10s

查看慢查询日志路径:

show variables like “%slow%”;

开启慢日志

set global slow_query_log=1;
mysql的几种日志记录
标签:basename逻辑最大的指定bin判断purgeselectredo




mysql有哪些日志
5. 中继日志 解释:中继日志是MySQL复制过程中的一个临时日志文件,存储了从主服务器发送到从服务器的二进制日志事件。在从服务器上,中继日志用于从主服务器复制数据。每种日志都有其在MySQL中的特定用途和重要性。通过合理配置和管理这些日志,数据库管理员可以确保MySQL服务器的稳定运行和最佳性能。同时...

MySQL中几种常见的日志
1.错误日志(errorlog)错误日志记录着 mysqld 启动和停止,以及服务器在运行过程中发生的错误及警告相关信息。当数据库意外宕机或发生其他错误时,我们应该去排查错误日志。log_error 参数控制错误日志是否写入文件及文件名称,默认情况下,错误日志被写入终端标准输出stderr。当然,推荐指定 log_error 参数...

mysql的日志有哪几类,作用是什么
MySQL的日志主要分为四大类:错误日志、查询日志、慢查询日志以及二进制日志。这些日志在数据库管理和优化中起着至关重要的作用。首先,错误日志记录了MySQL服务器启动、运行或停止时出现的问题。无论是服务器本身的问题,还是诸如连接问题、权限问题等,都会在错误日志中有所体现。例如,如果某个用户尝试以...

mysql日志文件有什么用
MySQL日志文件可分为:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log)、中继日志(relay log)。下面本篇文章就来给大家简单介绍一下这些MySQL日志文件,希望对你们有所帮助。1、重做日志(redo l...

MySQL系列(二)——日志篇
Redo Log,就像数据库的守护者,利用Write Ahead Logging (WAL) 技术确保即使在系统故障时也能恢复数据。MySQL的Redo Log分为65种类型,针对各种恢复操作,记录对Page的修改细节,包括Page Redo(如Index Page、Undo Page)的插入、修改和删除操作,以及Space和Logic Redo的日志记录。简化版的Redo Log写入...

大厂基本功 | MySQL 三大日志 ( binlog、redo log 和 undo log ) 的...
深入理解MySQL的核心基石,三大日志系统:binlog(二进制日志)、redo log(重做日志)和undo log(回滚日志),它们在数据管理和事务处理中发挥着至关重要的作用。MySQL的日志体系丰富多样,但这些核心日志无疑是数据安全与一致性的守护者。首先,让我们聚焦InnoDB引擎的独有重做日志(redo log),它是数据...

大厂基本功 | MySQL 三大日志 ( binlog、redo log 和 undo log ) 的...
在MySQL的世界里,三大日志系统犹如大厦的基石,它们分别是binlog(二进制日志)、redo log(重做日志)和undo log(回滚日志)。它们各自承担着关键的角色,确保数据的一致性和可靠性。首先,redo log是InnoDB存储引擎的独有特性,它犹如数据库的快照,负责记录每一次数据页的修改。其写入频率由innodb_...

mysql的几种日志记录
innodb_mirrored_log_groups 指定了日志镜像文件组的数量,默认1其他:很重要一点,redo log是什么时候写盘的?前面说了是在事物开始之后逐步写盘的。之所以说重做日志是在事务开始之后逐步写入重做日志文件,而不一定是事务提交才写入重做日志缓存,原因就是,重做日志有一个缓存区Innodb_log_buffer,Innodb...

mysql日志全部都没有开启,怎么回事
MySQL有以下几种日志:错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 默认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行...

mysql日志类型有哪些
一、错误日志 二、二进制日志 三、查询日志 四、慢查询日志

德城区19419359234: mysql日志有几种 每一种详解 -
甫视京制: 错误日志 普通查询日志 二进制日志 慢查询日志Mysql错误日志主要记录Mysql实例每次启动、停止的详细信息,以及Mysql实例运行过程中产生的警告或者错误信息,与其它日志不同,Mysql错误日志必须开启,无法关闭. Mysql general log记录...

德城区19419359234: 如何查看mysql数据库操作记录日志 -
甫视京制: 是否启用了日志 1 mysql>show variables like 'log_bin'; 怎样知道当前的日志 1 mysql> show master status; 看二进制日志文件用mysqlbinlog shell>mysqlbinlog mail-bin.000001(要写绝对问题路径d://) 或者 shell>mysqlbinlog mail-bin.000001 ...

德城区19419359234: 如何查看mysql运行,访问记录等日志 -
甫视京制: mysql有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 是否启用了日志 1 mysql>show variables like'log_%'; 怎样知道当前的日志 1 mysql> show master status;...

德城区19419359234: 怎么查看mysql日志 -
甫视京制: 您好,很高兴为您解答.是否启用了日志 mysql>show variables like 'log_bin';怎样知道当前的日志 mysql> show master status;看二进制日志文件用mysqlbinlog shell>mysqlbinlog mail-bin.000001(要写绝对问题路径d://) 或者shell>...

德城区19419359234: mysql二进制日志记录哪些内容 -
甫视京制: MySQL的日志文件模块启动后才会有日志记录. 开启日志服务: 在MY.INI里,MYSQLD项下添加log-bin=mysql. 如果只对某个库进行日志文件记录,那么再添加binlog-do-db=test,这样就只记录test数据库的日志,而放弃其他的. 添加完后,重新启动MYSQL的服务,日志文件开始工作了.查看是否启用了日志命令:mysql>show variables like 'log_bin'; 查看当前的日志命令:mysql> show master status; 看二进制日志文件用mysqlbinlog命令:shell>mysqlbinlog mail-bin.000001

德城区19419359234: 怎么样通过开启MySQL查询日志log -
甫视京制: 如何查看当前的二进制日志,可以使用mysqlbinlog的的工具,命令如下:shell>mysqlbinlog mail-bin.000001(要写绝对问题路径 d://)或者shell>mysqlbinlog mail-bin.000001 | tail4)mysql有以下几种日志:错误日志: -log-err查询日志: -log慢查...

德城区19419359234: 怎么让mysql - binglog文件每天生成一个 -
甫视京制: binlog 即二进制日志 它记录了数据库上面的所有改变 首先进入 mysql 命令行下面1.查看 binlog 文件列表 mysql> show binary logs;2.查看指定 binlog 文件的内容 mysql> show binlog events in 'mysql-bin.000008';

德城区19419359234: mysql的二进制日志和重做日志的用处有何不同 -
甫视京制: 重做日志与二进制日志的区别:1)二进制日志会记录所有与mysql有关的日志记录,包括InnoDB等其他存储引擎的日志,而InnoDB存储引擎的重做日志只记录有关其本身的事务日志,2)记录的内容不容,不管你将二进制日志文件记录的格式设为哪一种,其记录的都是关于一个事务的具体操作内容,而InnoDB存储引擎的重做日志文件记录的关于每个页的更改的物理情况;3)写入的时间也不同,二进制日志文件是在事务提交前进行记录的,而在事务进行的过程中,不断有重做日志条目被写入重做日志文件中.参考:http://blog.uouo123.com/post/623.html

德城区19419359234: 如何在mysql中记录sql日志记录 -
甫视京制: 1、WIN的话,在安装目录下,找到my.ini文件查[mysqld]区段,添加日志的配置比如说:[mysqld]log=C:/temp/mysql.loglog_slow_queries=C:/temp/mysql_slow.loglong_query_time=1log指示日志文件存放目录log_slow_queries指示记录执行时间长的sql日志目录;long_query_time指示多长时间算是执行时间.2、LINUX下的话,文件名为my.cnfLinux下这些配置项其实都有的,只是被注释掉了,删去注释符#之类的就可以了.你不愿删注释符,愿意的话手工再添加也可以……然后重启mysql服务就OK了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网