MySQL复制的中继日志与从库状态日志

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

在复制期间,从服务器会创建几个日志,以保存从主服务器中继到从属服务器的二进制日志事件,并记录有关中继日志中当前状态和位置的信息。在此过程中使用三种日志类型,在此处列出。

1、relay log

该中继日志包括的事件是从主的二进制日志读取的,中继日志中的事件由SQL线程在从属服务器上执行回放。

中继日志文件与二进制日志文件具有相同的格式,可以使用mysqlbinlog读取。

默认情况下,中继日志存在于从库的datadir目录下,且日志文件是以从库服务器主机名开头的连续序列号创建的,并通过索引文件来跟踪当前使用的中继日志文件。例如:
image

如果中继日志文件名使用默认的基于主机名命名的方式,在设置复制后又更改从服务器的主机名可能会导致复制失败。可能会出现如下报错信息:

Failed to open the relay log and Could not find target log during relay log initialization.
AI 代码解读

如果你预计到以后从服务器的主机名可能会更改,那么一开始你完全可以通过relay_log和relay_log_index参数来显式地指定中继日志的文件名,这样可不受服务器主机名的约束。

从库存在以下条件时,会触发中继日志文件的切换:
·每次启动IO线程;
·清除日志的操作:flush logs;
·当前中继日志文件过大,超过了max_relay_log_size或max_binlog_size参数指定的大小

2、master.info

该文件主要记录从库的状态以及连接到主库的配置信息,比如主机名,登录凭据和复制进度坐标的信息。以纯文本的形式存在,可直接cat查看。

该文件一般默认存在于从库的datadir目录下,也可以通过master_info_repository参数指定将日志信息写入到表中而不是文件中。

该文件记录的信息由slave的IO线程更新维护。

3、relay-log.info

该日志文件主要记录有关从服务器的中继日志中的执行点的状态信息。以纯文本的形式存在,可直接cat查看。

该文件一般默认存在于从库的datadir目录下,也可以通过relay_log_info_repository参数指定将日志信息写入到表中而不是文件中。

该文件记录的信息由slave的sql线程更新维护。

说明

master.info和relay-log.info这两个状态日志包含的信息类似于“show slave status”语句输出中所显示的信息。这两个文件记录的信息对于从库来说是十分重要的,由于状态日志存储在磁盘上,因此它们在从属服务器关闭后仍可生存。下次从属服务器启动时,它将读取两个日志,以确定复制进度:从主库读取二进制日志的进度以及处理自己的中继日志的进度。
有关master.info和relay-log.info文件中每一行代表的含义,可以阅读官方文档的第17.2.2.2节。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
32412
分享
相关文章
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
107 23
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
375 90
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
170 5
图解MySQL【日志】——Redo Log
图解MySQL【日志】——两阶段提交
两阶段提交是为了解决Redo Log和Binlog日志在事务提交时可能出现的半成功状态,确保两者的一致性。它分为准备阶段和提交阶段,通过协调者和参与者协作完成。准备阶段中,协调者向所有参与者发送准备请求,参与者执行事务并回复是否同意提交;提交阶段中,若所有参与者同意,则协调者发送提交请求,否则发送回滚请求。MySQL通过这种方式保证了分布式事务的一致性,并引入组提交机制减少磁盘I/O次数,提升性能。
168 4
图解MySQL【日志】——两阶段提交
图解MySQL【日志】——磁盘 I/O 次数过高时优化的办法
当 MySQL 磁盘 I/O 次数过高时,可通过调整参数优化。控制刷盘时机以降低频率:组提交参数 `binlog_group_commit_sync_delay` 和 `binlog_group_commit_sync_no_delay_count` 调整等待时间和事务数量;`sync_binlog=N` 设置 write 和 fsync 频率,`innodb_flush_log_at_trx_commit=2` 使提交时只写入 Redo Log 文件,由 OS 择机持久化,但两者在 OS 崩溃时有丢失数据风险。
129 3
MySQL日志
本文介绍了MySQL中三个重要的日志:binlog、redolog和undolog。binlog记录数据库更改操作,支持数据恢复、复制和审计;redolog保证事务的原子性和持久性,实现crash-safe;undolog用于事务回滚及MVCC的实现。每个日志都有其独特的作用和应用场景,确保数据库的稳定性和数据一致性。
图解MySQL【日志】——Buffer Pool
Buffer Pool 是数据库管理系统(DBMS)中用于缓存磁盘数据页的内存区域,主要包含数据页、索引页、undo 页等。它通过减少磁盘 I/O 提升性能,特别是在处理大型数据库时效果显著。查询时,整个数据页而非单条记录会被加载到 Buffer Pool 中,以提高访问效率。
77 0
图解MySQL【日志】——Buffer Pool
|
4月前
|
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
362 0

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问