MySQL日志系统深入解析:Redo Log, Undo Log与Binlog

上周一位客户问我MySQL日志系统是什么,我向他详细解释了这一点。
MySQL 日志系统主要分为三种类型:RedoLog、UndoLog 和 Binlog。

我们先来说说RedoLog。
它就像一个保险库,记录InnoDB存储引擎中数据页的修改。
主要作用是保证数据不丢失。
即使系统崩溃,也可以通过RedoLog恢复数据。
默认情况下,该日志存储在MySQL数据目录中,文件名为ib_logfile。
采用预写注册表策略。
当事务提交时,相关日志将立即写入磁盘。

然后是UndoLog,有点像undo key,记录事务的回滚操作。
当一个事务需要逆转时,UndoLog可以帮助我们将数据恢复到事务开始前的状态。
该日志存储在InnoDB表空间中,该文件通常是ibdata文件或自定义表空间文件。

最后是Binlog,它记录了MySQL服务器上执行的所有修改数据的SQL语句。
主要用于数据恢复、主从复制和数据审计。
该日志文件存放在MySQL数据目录下,文件名为mysql-bin。
它支持三种书写模式:LINE、STATMENT 和 MIXED。

这三类日志各有各的功能。
RedoLog保证数据不丢失,UndoLog保证事务的原子性,Binlog用于数据恢复和复制。
了解这些日志的工作原理对于数据库管理和优化非常重要。
不过,这取决于你。
如果您还有其他问题,请随时询问我。
我还在想这个问题。

mysql .log是什么日志

准确的说,MySQL的.log文件是一个二进制日志,主要由三个部分组成:数据恢复、主从复制、审计跟踪。

首先我们来说说最重要的数据恢复。
去年我们做的一个项目中,我们经历过两次数据故障:一次是硬盘突然死机,还有一次是运维人员删除了表。
幸运的是,二进制日志记录了操作的每一步。
我们可以把日志重放到操作前的状态,十分钟就完成了。
还有一点就是master和slave的重复。
在近3 000个电商系统中,当主库写入数据时,从库可以实现秒级同步,用户不会遇到任何延迟。
还有另一个重要的细节。
比如max_binlog_size太小,一天可能产生几十G的日志,服务器就会卡住。
用行话来说,这称为雪崩效应。
事实上,前面的一点延迟就会让一切都倒退。

一开始我以为日志越多越好,但后来我发现我错了。
日志占用的磁盘资源是真实的。
例如,如果 expire_logs_days 设置为 3 0 天,则较旧的日志将自动清除。
然而,如果某个恢复需要回到两个月前的数据,你肯定会感到惊讶。
等等,还有别的事。
如果日志名称顺序错误,从服务器可能会读取到错误的日志。
很多人不重视这一点。

我认为值得尝试将spend_Logs_days设置为7 天并使用binlog_rotate_interval自动修剪日志,但您应该有一个备份策略。