MySQL 知识点分享三:MySQL的8种日志和相关参数

本文介绍了MySQL数据库中不同类型的日志系统,包括重做日志用于崩溃恢复,回滚日志处理事务撤销,二进制日志记录数据变更,错误日志记录服务器状态,慢查询日志帮助优化查询,通用查询日志记录所有操作,中继日志在复制中起作用,以及DDL日志支持DDL操作的回滚和重做。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 重做日志(redo log)

重做日志是一种基于磁盘的数据结构,用于在崩溃恢复期间更正由不完整事务写入的数据.


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

innodb_log_file_size: 重做日志文件的大小


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


innodb_redo_log_archive_dirs: 定义可以在其中创建重做日志存档文件的标记目录. 可以在分号分隔的列表中定义多个标记的目录

innodb_redo_log_capacity: 定义重做日志文件占用的磁盘空间量(MySQL 8.0.30 or Higher)


innodb_flush_log_trx_commit: 参数控制事务提交时写重做日志的行为方式

2. 回滚日志(undo log)

回滚日志是与单个读写事务相关联的撤消日志记录的集合

innodb_undo_directory: InnoDB 创建撤消表空间的路径

innodb_undo_tablespaces: 定义InnoDB使用的撤销表空间的数量, 默认值和最小值为2

innodb_max_undo_log_size: 定义撤消表空间的阈值大小. 如果 undo 表空间超过了阈值, 则可以在启用 innodb_undo_log_ctruncate 时将其标记为截断. 默认值为 1024M

innodb_undo_log_truncate: 启用时, 超过 innodb_max_undo_log_size 阈值的撤消表空间将标记为截断. 只能截断撤消表空间. 不支持截断驻留在系统表空间中的撤消日志. 截断必须至少有两个撤消表空间

3. 二进制日志(binlog)

二进制日志主要记录 MySQL 数据库的变化。它会记录所有更改表数据和表结构的事件

log_bin: 是否记录二进制日志

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

log_bin_index: 二进制日志索引文件的名称, 其中包含二进制日志文件的名称


log_bin_trust_function_creators: 当启用二进制日志记录时, 此变量适用. 它控制是否可以信任存储函数创建者, 不创建可能导致不安全事件写入二进制日志的存储函数

sql_log_bin: 此变量控制是否为当前会话启用二进制日志的日志记录(假设二进制日志已启用)

sync_binlog: 参数控制事务提交时写二进制日志的行为方式

4. 错误日志(errorlog)

错误日志包含mysqld启动和关闭时间的记录。它还包含诊断消息,如服务器启动和关闭期间以及服务器运行时发生的错误、警告和注释

log_error: 默认错误日志目标. 如果目标是控制台, 则值为stderr. 否则, 目标是一个文件

log_error_verbosity: 控制日志记录详细程度, 可以设置为 1 2 3, 默认为2 设置为 3 时记录信息最全

5. 慢查询日志(slow query log)

慢速查询日志可用于查找需要很长时间才能执行的查询,因此是优化的候选查询.

long_query_time: 如果查询花费的时间超过这几秒, 则服务器会增加 Slow_queries 状态变量. 如果启用了慢速查询日志,则将查询记录到慢速查询日志文件中

min_examined_row_limit: 检查少于此行数的查询不会记录到慢速查询日志中

slow_query_log: 是否启用慢速查询日志

slow_query_log_file: 慢速查询日志文件的名称. 默认值为 host_name-slow.log

log_slow_extra: 如果启用了慢速查询日志, 并且输出目标包括FILE, 则服务器会将其他字段写入日志文件行, 以提供有关慢速语句的信息


log_slow_admin_statements: 在写入慢速查询日志的语句中包含慢速管理语句


log_queries_not_using_indexes: 启用此变量, 则将记录希望检索所有行的查询. 此选项不一定意味着不使用索引. 例如, 使用完整索引扫描的查询使用索引, 但会被记录, 因为索引不会限制行数


log_throttle_queries_not_using_indexes: 如果启用了 log_queries_not_using_indexes 此变量将限制每分钟可写入慢速查询日志的此类查询数

6. 通用查询日志(general log)

一般查询日志是mysqld正在做的事情的一般记录

general_log: 是否启用常规查询日志. 日志输出的目标由 log_output 系统变量控制,如果该值为 NONE,则即使启用了日志, 也不会写入日志条目

log_output: 常规查询日志和慢速查询日志输出的目标. 该值是从 TABLE、FILE 和 NONE 中选择的一个或多个逗号分隔的单词的列表

general_log_file: 常规查询日志文件的名称, 默认值为host_name

sql_log_off: 此变量控制当前会话是否禁用常规查询日志的日志记录(假设常规查询日志本身已启用)

7. 中继日志(relay log)

从库用于存储从master节点同步过来的binlog日志内容

max_relay_log_size: 复制副本中继日志的阈值, 超过则复制副本会旋转中继日志(关闭当前文件并打开下一个文件). 如果为0, 则服务器将 max_binlog_size 用于二进制日志和中继日志

relay_log: 中继日志文件的基本名称

relay_log_basename: 保存中继日志文件的基本名称和完整路径

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

relay_log_info_file: 现在不推荐使用此系统变量. 如果设置了relay_log_info_repository=file, 则用于设置副本应用程序元数据存储库的文件名. 该系统变量的使用已被弃用


relay_log_info_repository: 现在不推荐使用此系统变量. 设置 TABLE 是默认设置, 在配置多个复制通道时是必需的. 该系统变量的使用已被弃用

relay_log_purge: 在不再需要中继日志文件时, 禁用或启用自动清除中继日志文件

relay_log_recovery: 如果启用, 此变量将在服务器启动后立即启用自动中继日志恢复

relay_log_space_limit: 用于所有中继日志的最大空间量

sync_relay_log: 如果此变量的值大于0, 则在将每个 sync_relay_log 事件写入中继日志后, MySQL 服务器将其中继日志同步到磁盘

sync_relay_log_info: 复制副本更新应用程序元数据存储库之后的事务数. MySQL 8.0中的默认忽略此系统变量

8. DDL日志(metadata log)

为了支持DDL操作的重做和回滚,InnoDB将DDL日志写入mysql.InnoDB_DDL_log表,这是一个隐藏的数据字典表,默认用户无法直接访问其中的数据.

innodb_print_ddl_logs: 启用此选项会将 DDL 日志写入 stderr

查看DDL日志方法: SET GLOBAL innodb_print_ddl_logs=1; SET GLOBAL log_error_verbosity=3; (MySQL 8.0 默认为2,error log 记录Errors and warnings,不记录notes) 然后建库->建表-删库 注意存储引擎必须是InnoDB, 同时观察错误日志输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值