MySQL日志成员

先看下目前为止的MySQL日志家族都有哪些成员:
image.png

image.png
其他没有标记出来的,下面会进行说明。

1.error日志

错误日志包含mysqld启动和关闭时间的记录。它还包含诊断消息,如在服务器启动和关闭期间以及在服务器运行时发生的错误、警告和注释,错误日志将包含堆栈跟踪。跟踪可用于确定退出mysqld的位置。

参数:

log_error: 表示日志所在的路径

log_error_services:* 系统变量控制要启用哪些日志组件

image.png
说明:以上的意思是首先通过log_filter_internal 功能组件.然后通过日志构建组件,log_sink_internal. 格式化成特定的格式并写入相关输出目的地,如文件或系统日志.

log_error_suppression_list :用于错误日志的事件的抑制作用,有些日志不希望记录下来。

log_error_verbosity 日志记录等级:

设置1(仅限错误),2(错误和警告),3(错误,警告和注释)
设置2 或者更高级别,服务器将会记录关于基于不安全的语句消息.
设置3 ,服务器将记录尝试终止的连接和拒绝访问的错误.  

2.SQL语句相关日志

1)binary log

用来记录操作MySQL数据库中的写入性操作(增删改,但不包括查询),ddl操作。属于mysql server层的日志模块
image.png

log_bin:表示是否开启binlog日志

log_bin_basename:保存二进制日志文件的名称和完整路径

log_bin_index:二进制日志索引文件的名称

binlog_format:基于语句(statement)的,基于行的(row),以及结合前两者的混合模式(mixed)

expire_logs_days(binlog_expire_logs_seconds):日志清理时长

log_bin_trust_function_creators:是否可以信任函数写入二进制日志中

max_binlog_size:二进制日志的最大文件的大小限制,超过设置的最大限制之后,会发生日志滚动,也即重新生成一个二进制日志文件

binlog_cache_size:二进制日志缓冲区大小。当事务的记录大于设定的binlog_cache_size时,mysql会把缓冲区中的日志信息写入一个临时文件中

max_binlog_stmt_cache_size:非事务性的语句缓存大小

sql_log_bin:是否记录二进制日志,默认是1

sync_binlog:是MySQL 的二进制日志(binary log)同步到磁盘的频率

0:当事务提交之后,OS自行决定什么时候来做同步到磁盘
1:当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
N:当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

2)relay log

与二进制日志一样,中继日志由一组包含描述数据库更改的事件的编号文件和一个包含所有使用的中继日志文件名称的索引文件组成。中继日志文件与二进制日志文件具有相同的格式,
通俗讲:就是用于回放binlog内容的从库上生成日志文件,可以使用mysqlbinlog读取。

image.png

max_relay_log_size: relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;

relay_log:定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录

relay_log_basename:保存中继日志文件的名称和完整路径。此变量由服务器设置,且为只读。

relay_log_index:中继日志索引文件的名称

relay_log_info_file:设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置)

relay_log_info_repository:中继日志中的位置记录到mysql系统数据库的InnoDB表中,还是记录到数据目录中的文件中

relay_log_purge:是否自动清空不再需要中继日志时。默认值为1

relay_log_recovery:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,建议开启

relay_log_space_limit:防止中继日志写满磁盘,这里设置中继日志最大限额,建议不设置

sync_relay_log:默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制

sync_relay_log_info:每间隔多少事务刷新relay-log.info,如果是table(innodb)设置无效,每个事务都会更新

3)general log

将所有到达MySQL Server的SQL语句记录下来。一般不会开启开功能,因为log的量会非常庞大。但个别情况下可能会临时的开一会儿general log以供排障使用。

general_log:表示是否开启general日志

general_log_file:表示general日志所在的路径

log_output: 日志输出类型 table或file

4)slow log

慢日志由执行时间超过long_query_time的SQL语句组成。

slow_query_log:表示是否开启慢查询

long_query_time:表示慢查询阈值,SQL执行时间超过该值,则会记录到慢查询日志中。SQL的执行耗时不包含锁等待时间。

slow_query_log_file:表示慢日志所在的路径

log_queries_not_using_indexes: 没有使用索引的SQL也将被记录到慢查询日志中;

log_throttle_queries_not_using_indexes: 如果log_queries_not_using_indexes打开,没有使用索引的sql将会写入到慢查询日志中,该参数将限制每分钟写入的SQL数量;

min_examined_row_limit: 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中;

log_slow_admin_statements: 管理语句执行时间大于阈值也将写入到慢查询日志中,管理语句包括alter table, check table等等;

log_slow_slave_statements: 从库应用binlog,如果binlog格式是statement,执行时间超过阈值时,将写入从库的慢查询日志, 对于ROW格式binlog,不管执行时间有没有超过阈值,都不会写入到从库的慢查询日志.

3.innodb 日志

1)undo 日志
回滚日志日志记录包含有关回滚事务的记录信息。还提供多个行版本控制(MVCC),undo日志逻辑日志。当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。undo log是采用段(segment)的方式来记录的,每个undo操作在记录的时候占用一个undo log segment。
image.png
image.png

innodb_max_undo_log_size:回滚日志最大小

innodb_undo_directory:回滚日志文件路径

innodb_undo_log_encrypt:加密回滚日志

innodb_undo_log_truncate:自动清理undo log的功能

innodb_undo_tablespaces:回滚日志文件数量

innodb_rollback_segments:InnoDB用于生成回滚记录的事务的回滚段数,以及用于生成undo记录的事务的全局临时表空间

2)redo log
重做日志是一种基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据。
以循环方式写入重做日志文件,通过重做日志的数据传递由不断增加的LSN(Log Sequence Number)值表示。为了保证数据库本身的一致性和持久性。
image.png

innodb_log_file_size: 重做日志文件的大小

innodb_log_files_in_group:指定重做日志文件组中文件的数量

innodb_log_group_home_dir :指定日志文件组所在的路径

innodb_flush_log_at_trx_commit:事务提交时将redo log buffer写到磁盘

image.png

4.ddl日志

DDL日志或元数据日志记录数据定义语句(如DROP TABLE和ALTER TABLE)生成的元数据操作。MySQL使用这个日志从元数据操作中发生的崩溃中恢复。元数据操作的记录被写入到MySQL数据目录中ddl_log文件中。这是一个二进制文件;不可阅读。

要记录元数据语句时才会创建ddl_log.log,并在mysqld成功启动后删除它。因此,这个文件可能不会出现在以完全正常的方式运行的MySQL服务器上。目前,ddl_log.log最多可以保存1048573个条目,相当于4 GB的大小。一旦超过这个限制,您必须重命名或删除文件,然后才能执行任何额外的DDL语句。

总结

通过上面的了解,这些日志文件的作用和相关参数。如果这些日志最终都要落盘,那io交付方面还是比较频繁的。
很多数据库发展到目前为止,IO的瓶颈还是无法突破,所以要合理的配置这些日志。
image.png

Guess you like

Origin blog.csdn.net/dreamyuzhou/article/details/117482630