MySQL 日志

本贴最后更新于 836 天前,其中的信息可能已经天翻地覆

二进制日志 binary-log

二进制日志:记录了所有对 MySQL 数据库成功执行的修改事件,包括增删改查事件和对表结构的修改事件

作用:基于时间点的备份和恢复;主从复制

二进制日志的格式

  • 基于段的格式 binlog_format=STATEMENT
    优点:日志记录量相对较小,节约磁盘及网络 I/O
    缺点:可能造成 MySQL 复制的主备服务器数据不一致
  • 基于行的日志格式 binlog_format=ROW
    优点:Row 格式可以避免 MySQL 复制中出现的主从不一致问题,使 MySQL 主从复制更加安全;对每一行数据的修改比基于段的复制高效
    缺点:记录日志量较大.
    binlog_row_image=[FULL | MINIMAL | NOBLOB]
  • 混合日志格式 binlog_format=MIXED
    特点:根据 SQL 语句由系统决在基于段和基于行的日志格式中选择;数据量的大小由所执行的 SQL 语句决定

开启:my.ini 中 MySQLld 组设置是关于二进制日志的:log-bin

查看:

# SHOW BINARY LOGS
show variables like 'bonlog_format'
MYSQLBINLOG D:/mysql/log/binlog.001

设置:

set session binlog_format=STATEMENT | ROW
flush logs

log-bin [=base_name]
binlog_ format=[ROW | ISTATEMENT | IMIXED]  # 二进制日志格式
binlog_row_image=[FULLI | MINIMALI | NOBLOB]  # Row格式设置
binlog_rows query_log_events=[ON I OFF]
log_ slave_updates=[ON I OFF]
sync_binlog=[1 | 0]

删除:

RESET MASTER  # 删除所有二进制文件
PURGE MASTER LOGS TO "binlog.001"  # 删除指定二进制文件

暂停和恢复:

SET sql_log_bin = 0  # 暂停
SET sql_log_bin = 1  # 恢复

使用二进制日志恢复数据库:

MYSQLBINLOG --stop-date="2021-08-30 15:27:48" D:/mysql/log/binlog.001 | mysql --uuser --ppass

错误日志 error-log

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

作用:分析排除 MySQL 运行错误;记录未经授权的访问

启动:my.ini 中 MySQLld 组设置是关于错误日志的:log_error=$mysql/sql_log/mysql-error.log

查看:

SHOW VARIABLES LIKE "log_error"		# 查看存储路径及文件名

删除:

服务端:MYSQLADMIN -u root -P flush-logs
客户端:flush logs

通用查询 general-log

通用查询日志:记录建立的客户端连接和执行的语句
启动:my.ini 中 MySQLld 组设置是关于查询日志的:log
查看:D:\MySQL-5.7.10-win32\data 目录下的 myPC.log
删除:物理删除 .err 日志文件,执行 MYSQLADMIN -u root -P flush-logs

慢查询 slow-query-log

慢查询:记承所有执行时间超过 long_query_time 的所有查询或不使用索引的查询

启动

# 开启慢查询
set global slow_query_log=on;

配置

slow_query_log=[ON | OFF]:是否开启慢查询日志
slow_query_log_file =$mysql/sql_log/slowlog.log:慢查询日志存储路径
long_query_time:慢查询阈值,当查询时间多于设定的阈值时,记录日志
log_queries_not_using_indexes=[ON | OFF]:未使用索引的查询也被记录到慢查询日志中
log_slow_admin_statements=[ON | OFF]
log_slow_slave_statements=[ON | OFF]

查看

SHOW VARIABLES LIKE '%slow_query_log%'	# 查看存储路径及文件名

重做日志 redo-log

作用

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

事务开始之后就产生 redo log,redo log 的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入 redo log 文件中。当对应事务的脏页写入到磁盘之后,redo log 的使命也就完成了,重做日志占用的空间就可以重用(被覆盖)

innodb_log_group_home_dir  指定日志文件组所在的路径
innodb_log_files_in_group  指定重做日志文件组中文件的数量
innodb_log_file_size       重做日志文件的大小
innodb_mirrored_log_groups 指定了日志镜像文件组的数量

回滚日志 undo-log

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

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

事务开始之前,将当前是的版本生成 undo log,undo 也会产生 redo 来保证 undo log 的可靠性。当事务提交之后,undo log 并不能立马被删除,而是放入待清理的链表,由 purge 线程判断是否由其他事务在使用 undo 段中表的上一个事务之前的版本信息,决定是否可以清理 undo log 的日志空间

innodb_undo_directory = /data/undospace/   # undo独立表空间的存放目录
innodb_undo_logs = 128 			   # 回滚段为128KB
innodb_undo_tablespaces = 4 		   #  指定有4undo log文件

中继日志 relay-log

用于主从复制,临时存储从主库同步的二进制日志,用来给 slave 库恢复

relay_log=filename
relay_log_purge=[ON I OFF]
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖
1 操作
Hefery 在 2022-01-09 23:31:33 更新了该帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...