MySQL日志介绍

简介: MySQL日志介绍

MySQL的日志主要分为六类:



(1) 错误日志log_error:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题


(2) 查询日志general_log:记录简历的客户端连接和执行的语句


(3) 慢查询日志slow_query_log:记录所有执行时间超过long_query_time的所有查询或不使用索引的查询


(4)二进制日志binlog:记录所有更改数据的语句,可以用于数据复制


(5)事务日志innodb_log:用来记录数据库更新情况的文件,它可以记录针对数据库的任何操作,并将记录的结果保存到独立的文件中


(6)中继日志relay_log:复制中使用

image.png

各类日志简介


1.二进制日志binlog


主要记录MySQL数据库的变化,二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息,二进制日志包含了所有更新了数据或者已经潜在更新了数据的语句,语句以“事件”的形式保存,描述数据更改。


二进制日志还包含关于每个更新数据库的语句的执行时间信息,不包含没有修改任何数据的语句,如果想要记录所有的语句,需要使用一般查询日志,使用二进制日志的主要目的是最大可能的恢复数据库,因为二进制日志包含备份后进行的所有更新。


binlog附加参数


max_binlog_size:


设置binlog的最大存储上线,当日志达到该日志的上限时,mysql会重新创建一个日志开始记录,不过偶尔也会超出该设置的binlog,一般都是因为即将达到上限时候,产生了一个比较大的事物,为了保证事物的安全,mysql不会将同一个事物分开记录到两个binlog


binlog-do-db=db_name:


明确告诉mysql,需要对某个数据库记录binlog,如果有了binlog-do-db=db_name 显示指定,mysql会忽略正对其他书库执行query,而仅仅记录只对指定数据库执行的query


binlog-ignore-db=db_name:


显示的指定忽略某个数据库的binlog记录。


binlog-do-db 和binlog-ignore-db参数:


有一个共同的概念,参数db_name 不是指query 语句更新的数据所在的数据库,而是执行query的时候,当前所处的数据库。不论更新哪个数据库的数据,mysql仅仅比较当前连接所处的数据库与参数设置的数据库名。而不会分析query语句所更新的数据库所在数据库。


binlog_cache_size :


当使用事务的存储引擎InnoDB时,所有未提交的事务会记录到一个缓存中,等待事务提交时,直接将缓冲中的二进制日志写入二进制日志文件,而该缓冲的大小由binlog_cache_size决定,默认大小为32KB,此外,binlog_cache_size是基于回话的,也就是,当一个线程开始一个事务时,mysql会自动分配一个大小为binlog_cache_size的缓存,因此该值得设置需要相当小心,可以通过show global status 查看binlog_cache_use、binlog_cache_disk_use的状态,可以判断当前binlog_cache_size的设置是否合适。


sync_binlog:


参数sync_binlog=[N]表示每写缓存多少次就同步到磁盘,如果将N设置为1,则表示采用同步写磁盘的方式来写二进制日志,该参数很重要,这个以后还会提到。值得注意的是,在将该参数设置为1时,也应该将innodb_support_xa设为1来解决,这可以确保二进制日志和InnoDB存储引擎数据文件的同步


expire_logs_days:


定义了MySQL清楚过期日志的时间


二进制日志的开启方式:


(1)指定日志路径


mysqld_safe --user=mysql --log-bin=[path] &

如果没有指定文件名 默认mysql-bin,默认路径为datadir目录


(2)编辑my.cnf

[mysqld]

log-bin=[path]


log-bin= /var/log/mysql/mysql-bin.log --指定二进制日志的名称


log_bin_index= /var/log/mysql/mysql-bin.log.index


–二进制日志索引的名称


relay_log= /var/log/mysql/mysql-bin.relay —中继日志的名称


relay_log_index= /var/log/mysql/mysql-bin.relay.index


—中继日志索引的名称


二进制日志的查看方式:


show binary logs可以查看当前的二进制日志文件个数以及文件名


±----------------±-----------+


| Log_name | File_size |


±----------------±-----------+


| mysqlbin.000001 | 27365 |


| mysqlbin.000002 | 1029074 |


| mysqlbin.000003 | 3457 |


| mysqlbin.000004 | 126 |


| mysqlbin.000005 | 1074144657 |


| mysqlbin.000006 | 1074572441


mysqlbinlog命令可以用来查看当前日志里面的内容


如果执行FLUSH LOGS,log-bin 会使用新的二进制日志编号


2.通用查询日志general_log


通用查询日志记录在MySQL上执行过的SQL语句,包含查询语句与启动时间。建议不是在调试环境下不要开启查询日志,因为它会不断占据磁盘空间,并且产生大量的IO,一般是在需要采样分析或者调试的时候才开启。


通用日志的开启方法:


(1)执行命令开启:


set global general_log=1;//=0就是关闭通用查询日志


此时在默认在mysql的data目录中生成了localhost.log文件,该文件就是通用查询日志文件


(2)my.cnf中配置的方式,在my.cnf文件的[mysqld]下面任意一行增加或修改配置:


general_log-file[=path/[filename]] //=后面都是可选的,即有默认的保存日志的文件


general_log=1 //表示开启通用查询日志


推荐使用第一种方式开启或关闭通用查询日志,因为my.cnf的修改要生效需要重启mysql服务,并且这种通用查询日志的开启不需要一直开启而是短时间开启就需要关闭,所以在 my.cnf关闭时又要重启mysql服务。


3.错误日志err_log


错误日志文件包含了当mysqld启动和停止时,以及服务器在运行过程中发生严重错误时候的相关信息,在mysql中,错误日志非常有用,MySQL会将启动和停止数据库信息以及一些错误信息记录保存到错误日志文件中。


默认时错误日志的存放位置在数据目录中,名称为“server_name.err”

错误日志记录的事件:

a)、服务器启动关闭过程中的信息

b)、服务器运行过程中的错误信息

c)、事件调试器运行一个事件时间生的信息

d)、在从服务器上启动从服务器进程时产生的信息


查看与日志相关的变量:

mysql> SHOW GLOBAL VARIABLES LIKE ‘%log_error%’;


my.cnf中错误日志开启:

log_error=/PATH/TO/ERROR_LOG_FILENAME

例如:log_error = /mydata/data/hostname.err

定义错误日志文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。


log_warnings=#

设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。


删除错误日志之后要想重建日志:


在运行状态下删除错误日志文件后,mysql并不会自动创建日志文件,flush logs在重建加载日志的时候,如果文件不存在,则会自动创建,所以在删除错误日志之后,如果需要重建日志文件,需要在服务端执行以下命令:


mysqladmin -uroot -p flush-logs


4.慢查询日志log-slow-queries


慢查询日志是记录查询时长超过指定时间的日志,慢查询日志主要用来记录执行时间较长的查询语句,


mysql中慢查询日志默认是关闭的,


开启方法如下:


(1)可以通过配置文件my.cnf中的log-slow-queries选项打开,设定是否启用慢查询日志。0或OFF表示禁用,1或ON表示启用。日志信息的输出位置取决于log_output变量的定义,如果其值为NONE,则即便slow_query_log为ON,也不会记录任何慢查询信息。作用范围为全局级别,可用于选项文件,属动态变量。


(2)也可以在MySQL服务启动的时候使用–log-slow-queries[=file_name]启动慢查询日志


启动慢查询时,需要在my.cnf文件中配置long_query_time选项指定记录阈值,如果某条查询语句的查询时间超过了这个值,这个查询过程将被记录到慢查询日志文件中。


5.事务日志


Innodb主要是通过事务日志实现ACID特性


事务日志包括:重做日志redo和回滚日志undo


事务日志文件名为"ib_logfile0"和“ib_logfile1”,默认存放在表空间所在目录,它是用来记录数据库更新情况的文件,它可以记录针对数据库的任何操作,并将记录的结果保存到独立的文件中。对于每一次数据库更新的过程,事务日志文件都有非常全面的记录。根据这些记录可以恢复数据库更新前的状态。


与事务日志相关变量:

innodb_log_group_home_dir=/PATH/TO/DIR:

设定InnoDB重做日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范围为全局级别,可用于选项文件,属非动态变量。


innodb_log_file_size={108576 … 4294967295}

设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为明智的取值范围是从1MB到缓存池体积的1/n,其中n表示日志组中日志文件的个数。日志文件越大,在缓存池中需要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障恢复速度。作用范围为全局级别,可用于选项文件,属非动态变量。


innodb_log_files_in_group={2 … 100}

设定日志组中日志文件的个数。InnoDB以循环的方式使用这些日志文件。默认值为2。作用范围为全局级别,可用于选项文件,属非动态变量。


innodb_log_buffer_size={262144 … 4294967295}

设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务可以借助于更大的日志缓冲区来避免在事务完成之前将日志缓冲区的数据写入日志文件,以减少I/O操作进而提升系统性能。因此,在有着较大事务的应用场景中,建议为此变量设定一个更大的值。作用范围为全局级别,可用于选项文件,属非动态变量。


innodb_flush_log_at_trx_commit = 1

# 表示有事务提交后,不会让事务先写进buffer,再同步到事务日志文件,而是一旦有事务提交就立刻写进事务日志,并且还每隔1秒钟也会把buffer里的数据同步到文件,这样IO消耗大,默认值是"1",可修改为“2”


innodb_locks_unsafe_for_binlog OFF

#这个变量建议保持OFF状态,详细的原理不清楚


innodb_mirrored_log_groups = 1

#事务日志组保存的镜像数


6.中继日志

在复制环境中产的的日志信息


与中继日志相关的变量:

log_slave_updates

用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的生效需要在从服务器上启用二进制日志功能。


relay_log=file_name

设定中继日志的文件名称,默认为host_name-relay-bin。也可以使用绝对路径,以指定非数据目录来存储中继日志。作用范围为全局级别,可用于选项文件,属非动态变量。


relay_log_index=file_name

设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index。作用范围为全局级别,可用于选项文件,属非动态变量。


relay-log-info-file=file_name

设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info。作用范围为全局级别,可用于选项文件,属非动态变量。

relay_log_purge={ON|OFF}

设定对不再需要的中继日志是否自动进行清理。默认值为ON。作用范围为全局级别,可用于选项文件,属动态变量。


relay_log_space_limit=#

设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数。作用范围为全局级别,可用于选项文件,属非动态变量。


max_relay_log_size={4096…1073741824}

设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。



relay_log_space_limit=#

设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数。作用范围为全局级别,可用于选项文件,属非动态变量。


max_relay_log_size={4096…1073741824}

设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。


关于MySQL日志,你学废了么?

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
139 6
|
9月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
701 90
|
7月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
317 23
|
8月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
9月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
221 16
|
9月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
195 4
|
10月前
|
关系型数据库 MySQL 数据库
MySQL日志
本文介绍了MySQL中三个重要的日志:binlog、redolog和undolog。binlog记录数据库更改操作,支持数据恢复、复制和审计;redolog保证事务的原子性和持久性,实现crash-safe;undolog用于事务回滚及MVCC的实现。每个日志都有其独特的作用和应用场景,确保数据库的稳定性和数据一致性。
195 1
|
9月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1139 0
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
165 3
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多