Relay log read failure解决办法

本文介绍了MySQL从库出现Relay Log读取失败错误的原因及两种解决方案:一是手动指定同步位置;二是通过停止并重置从库来恢复数据同步。

show slave status \G  提示如下错误
Relay log read failure: Could not parse relay log event entry. The possible reasons are: 
the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), 
the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), 
a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's 
binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.

原因 
在传输master log-bin时,因网络原因或slave机压力问题,造成log-relay文件格式错误


解决方法一: 
找到relay-log.info,第一行记录了当前正在执行的log-relay文件名 
找到该文件的下一个文件 
使用mysqlbinlog查看该文件,在#98这行有Rotate to log-bin.000004 pos: 4等信息,这就是目前slave停止的位置 
在slave上重新指定同步位置,重新执行:
change master to 
master_host='1.1.1.1',
master_user='repl',
master_password='111111',
master_port=3306,
master_log_file='log-bin.000004',
master_log_pos=4;
slave start;
show slave status\G;

解决方法二:
stop slave之后,重新reset slave;
再看,数据已经开始同步了



本文转自 lover00751CTO博客,原文链接:http://blog.51cto.com/wangwei007/1101683,如需转载请自行联系原作者

在 MySQL 的主从复制(Replication)架构中,**binlog(Binary Log)** 和 **relay log(中继日志)** 是两个非常关键的日志机制,它们分别负责记录主库的操作和在从库上暂存这些操作,以便重放执行。 --- ## 一、binlog(Binary Log) ### ✅ 作用: - 记录所有导致数据更改的 SQL 或行级更改(取决于格式)。 - 用于数据恢复、主从复制、审计等。 ### ✅ 存储位置: 默认在 MySQL 数据目录下,由 `log_bin` 配置项控制。 ### ✅ 格式(`binlog_format`): - `STATEMENT`:记录 SQL 语句。 - `ROW`:记录每一行的更改(推荐用于复制)。 - `MIXED`:混合使用前两者。 ### ✅ 查看 binlog 内容(使用 `mysqlbinlog` 工具): ```bash mysqlbinlog /var/lib/mysql/mysql-bin.000001 ``` --- ## 二、relay log(中继日志) ### ✅ 作用: - 从库将主库传来的 binlog 内容写入 relay log。 - SQL 线程再读取 relay log 并重放(replay)到从库。 ### ✅ 存储位置: 通常在从库的数据目录下,默认文件名格式为: - `relay-log.000001` - `relay-log.index` ### ✅ 关键参数: - `relay_log`:指定 relay log 文件名。 - `relay_log_index`:索引文件。 - `relay_log_recovery`:开启自动恢复,防止 relay log 损坏。 --- ## 三、binlogrelay log 的工作流程 1. 主库写入 binlog。 2. 从库的 I/O 线程连接主库并请求 binlog。 3. 主库将 binlog 事件发送给从库。 4. 从库的 I/O 线程将事件写入本地 relay log。 5. 从库的 SQL 线程读取 relay log 并执行事件,完成数据同步。 --- ## 四、常见命令和操作 ### ✅ 查看主库 binlog 位置(用于从库连接): ```sql SHOW MASTER STATUS; ``` 输出示例: ``` File: mysql-bin.000001 Position: 154 ``` ### ✅ 查看从库的复制状态: ```sql SHOW SLAVE STATUS\G ``` 关键字段: - `Slave_IO_Running`: Yes - `Slave_SQL_Running`: Yes - `Last_Error`: (如果有错误会显示) - `Relay_Log_File`: relay-log.000002 - `Relay_Log_Pos`: 320 ### ✅ 启动/停止复制线程: ```sql START SLAVE; STOP SLAVE; ``` --- ## 五、Python 示例:读取 binlog 并解析事件(使用 `mysql-replication` 库) ```python from pymysqlreplication import BinLogStreamReader from pymysqlreplication.row_event import ( DeleteRowsEvent, UpdateRowsEvent, WriteRowsEvent, ) mysql_settings = { "host": "127.0.0.1", "port": 3306, "user": "root", "passwd": "your_password" } stream = BinLogStreamReader( connection_settings=mysql_settings, server_id=100, only_events=[WriteRowsEvent, UpdateRowsEvent, DeleteRowsEvent], blocking=True ) for binlogevent in stream: for row in binlogevent.rows: print(f"Database: {binlogevent.schema}, Table: {binlogevent.table}") print(row) ``` 这段代码可以实时读取 binlog 并解析行级变更。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值