MySQL 中常见的几种日志
MySQL 中有六种日志文件,分别是:
重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢
查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。
之前没认真学习过,上次去面试被问死了,痛定思痛整理下相关的知识。
binglog
最早接触 binlog 是做数据库主从同步的时候,知道是通过同步 binlog 实现的。binlog 是 没有
MySQL sever 层维护的一种二进制日志,与 innodb 引擎中的 redo/undo log 是完全不同的日志。
其主要是用来记录对 MySQL 数据更新或潜在发生更新的 SQL 语句,并以 “事务”的形式保存在磁盘
中。
binlog 主要有以下作用:
复制:MySQL 主从复制在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 并回放
来达到 master-slave 数据一致的目的
数据恢复:通过 mysqlbinlog 工具恢复数据
增量备份
几个知识点:
binlog 不会记录不修改数据的语句,比如 Select 或者 Show
binlog 会重写日志中的密码,保证不以纯文本的形式出现
MySQL 8 之后的版本可以选择对 binlog 进行加密
具体的写入时间:在事务提交的时候,数据库会把 binlog cache 写入 binlog 文件中,但并没有执行
fsync()操作,即只将文件内容写入到 OS 缓存中。随后根据配置判断是否执行 fsync。
删除时间:保持时间由参数 expire_logs_days 配置,也就是说对于非活动的日志文件,在生成时间超
过 expire_logs_days 配置的天数之后,会被自动删除。
管理
有这几个常用的命令可以查看 binlog 的状态:
binlog 的配置信息:show variables like '%log_bin%';
binlog 的格式:show variables like 'binlog_format';
日志的文件列表:show binary logs;
当前日志的写入状态:show master status;
清空 binlog 日志:reset master;
格式
binlog 日志有 Row、Statement、Mixed 三种格式。可以通过 my.cnf 配置文件及 set global
binlog_format='ROW/STATEMENT/MIXED'进行修改,命令行 show variables like
'binlog_format' 命令查看 binglog 格式。
Row 格式
Row 格式仅保存记录被修改细节,不记录 sql 语句上下文相关信息。新版本的 MySQL 默认是 Row
格式。