greatSQL_user01 发表于 2024-11-7 12:57:07

binlog异常写入后恢复情况探讨

本帖最后由 greatSQL_user01 于 2024-11-10 11:24 编辑

关于binlog完整性校验的参数binlog_checksum作用:控制二进制日志 (Binlog) 文件的校验和机制。启用 CRC32 校验和,以确保 Binlog 文件的数据完整性和正确性。

咨询一下各位大佬:

我看这个参数可以检验binlog,行复制时,如果写redo之后在写binlog时宕机,有没有可能binlog写了一半的情况然后MySQL启动时也认为redo和binlog一致了?毕竟binlog里面也有同一个xid了吧,这当中这个参数是怎么起作用的?



yejr 发表于 2024-11-7 17:56:15

可以先看下文档中的这两篇内容

- https://greatsql.cn/docs/8.0.32-26/2-about-greatsql/4-3-greatsql-binary-log.html

- https://greatsql.cn/docs/8.0.32-26/2-about-greatsql/4-5-greatsql-redo-log.html

greatSQL_user01 发表于 2024-11-7 20:34:08

yejr 发表于 2024-11-7 17:56
可以先看下文档中的这两篇内容

- https://greatsql.cn/docs/8.0.32-26/2-about-greatsql/4-3-greatsql-bin ...

好像没看到2PC机制的描述,另外binlog刷盘流程那个图是不是画错了?一开始不是应该先将events写入binlog cache吗,怎么先写入binlog了。。

还有redo log那一章节也有点写错,如下图,应该想描述的是innodb_log_file_size:


yejr 发表于 2024-11-8 09:20:42

greatSQL_user01 发表于 2024-11-7 20:34
好像没看到2PC机制的描述,另外binlog刷盘流程那个图是不是画错了?一开始不是应该先将events写入binlog...

谢谢您的反馈,非常细心。

1、binlog & redo 的 2PC 描述在文档中确实没有,后面考虑补充。

2、写binlog的流程图的确画错了,是要先写入binlog cache。

3、redo那章中您框出来的参数名写错了。

以上的问题 2&3 会马上修复,再次感谢。

yejr 发表于 2024-11-8 14:44:28

yejr 发表于 2024-11-8 09:20
谢谢您的反馈,非常细心。

1、binlog & redo 的 2PC 描述在文档中确实没有,后面考虑补充。


2PC相关内容也已更新 https://greatsql.cn/docs/8.0.32-26/2-about-greatsql/4-5-greatsql-redo-log.html#%E4%B8%A4%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4-2pc

reddey 发表于 2024-11-8 16:35:26

greatSQL_user01 发表于 2024-11-7 20:34
好像没看到2PC机制的描述,另外binlog刷盘流程那个图是不是画错了?一开始不是应该先将events写入binlog...

看得非常仔细,说明你是认真阅读了的。

greatSQL_user01 发表于 2024-11-10 11:11:32

reddey 发表于 2024-11-8 16:35
看得非常仔细,说明你是认真阅读了的。

因为带着疑惑尝试来寻找答案,所以大佬说让我看那里我就尝试认真看看,虽然以前看过了:lol

greatSQL_user01 发表于 2024-11-10 11:17:53

yejr 发表于 2024-11-8 09:20
谢谢您的反馈,非常细心。

1、binlog & redo 的 2PC 描述在文档中确实没有,后面考虑补充。


客气了,顺带的事,我现在理了一下思路,有binlog_checksum这个参数的存在,如果存在redo写完、binlog写一半就宕机的情况,那故障恢复的时候应该还是会将事务回滚的吧?毕竟binlog不完整,即使有一样的xid存在?再次感谢大佬~:lol

yejr 发表于 2024-11-10 17:33:05

greatSQL_user01 发表于 2024-11-10 11:17
客气了,顺带的事,我现在理了一下思路,有binlog_checksum这个参数的存在,如果存在redo写完、binlog写 ...

不会的。
因为不会只简单判断是否有binlog,也要看是否有commit状态。

greatSQL_user01 发表于 2024-11-11 17:18:11

yejr 发表于 2024-11-10 17:33
不会的。
因为不会只简单判断是否有binlog,也要看是否有commit状态。

嗯,我描述的就是redo里面只标记prepare状态,但是binlog里面数据不完整的情况,这个时候应该是要结合binlog_checksum一起判断决定是否回滚吧?有时候有点懵,不知道这样理解对不对
页: [1] 2
查看完整版本: binlog异常写入后恢复情况探讨