【MySQL】解决mysql的 1594 错误

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
对于主从架构的mysql,当发生主机断电或者其他原因异常crash的时候, slave的容易发生读取binlog出错的问题,最常见的是 
show slave status \G;
Master_Log_File: mysql-bin.000029
Read_Master_Log_Pos: 3154083
Relay_Log_File:  relay-bin.000478
Relay_Log_Pos: 633
Relay_Master_Log_File: mysql-bin.000027
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: 
Replicate_Ignore_DB: 
Replicate_Do_Table: 
Replicate_Ignore_Table: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
Last_Errno: 1594
Last_Error: 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.
Skip_Counter: 0
Exec_Master_Log_Pos: 234663436
依据错误描述提示,显然slave sql 进程读取不到relay log。
解决该问题之前先了解几个参数:
mysql的主从复制的原理可知,slave 的sql线程理论上来说是延迟于IO线程,show slave status 查询时 Relay_Master_Log_File和Master_Log_File文件显示的不是同一个文件。
Master_Log_File
The name of the master binary log file from which the I/O thread is currently reading.
slave的IO线程当前正在读取的master二进制日志文件名。
Relay_Master_Log_File
The name of the master binary log file containing the most recent event executed by the SQL thread.
slave的Sql线程最近执行的master二进制日志文件名。(该文件有可能是滞后于IO线程正在读取的二进制日志文件)
Read_Master_Log_Pos
The position in the current master binary log file up to which the I/O thread has read.
Exec_Master_Log_Pos
The position in the current master binary log file to which the SQL thread has read and executed, marking the start of the next transaction or event to be processed. You can use this value with the CHANGE MASTER TO statement's MASTER_LOG_POS option when starting a new slave from an existing slave, so that the new slave reads from this point. The coordinates given by (Relay_Master_Log_File, Exec_Master_Log_Pos) in the master's binary log correspond to the coordinates given by (Relay_Log_File, Relay_Log_Pos) in the relay log.
slave的Sql线程已经读并且执行的master二进制日志文件的位置,标记下一个被执行的事务或事件的开始位置。
你可以将该值应用于两台slave演变为主从结构的应用场景中,新的slave可以在change master to语句中使用该值作为master_log_pos选项的值。master二进制日志文件的(Relay_Master_Log_File, Exec_Master_Log_Pos) 的坐标对应于slave中继日志(Relay_Log_File,Relay_Log_Pos) 坐标.


#!/bin/bash
#created by yangyi 
[ -z "$1" ] && exit 0 || PORT=$1
repair_1594()
{
  local portlist=$1
  for my_port in $portlist 
  do
    Last_SQL_Errno=$(mysql -uroot -h127.0.0.1 -P${my_port}  -Ae"show slave status \G"  2>/dev/null | grep Last_SQL_Errno | awk '{print $2}' )
    echo ${Last_SQL_Errno}
    Master_Host=`mysql -uroot -h127.0.0.1 -P${PORT} -Ae"show slave status \G" | grep Master_Host |awk '{print $2}'`
    Relay_Master_Log_File=`mysql -uroot -h127.0.0.1 -P${PORT}  -Ae"show slave status \G" | grep Relay_Master_Log_File |awk '{print $2}'`
    Exec_Master_Log_Pos=`mysql -uroot -h127.0.0.1 -P${PORT}  -Ae"show slave status \G" | grep Exec_Master_Log_Pos  |awk '{print $2}'`
    sql="change master to master_host='${Master_Host}',master_port=$PORT, master_user='rep',master_password='yangyi@rac1',master_log_file='${Relay_Master_Log_File}',master_log_pos=${Exec_Master_Log_Pos};"
    mysql -uroot -h127.0.0.1 -P$PORT -e " stop slave ; sleep 1; ${sql} ;start slave ;"
    sleep 1
    is_OK=`mysql -uroot -h127.0.0.1 -P$PORT -p123456 -e "show slave status  \G"| grep Seconds_Behind_Master | awk '{print $2}'`    
    if [[ ${is_OK} -ge 0 ]];
    then 
      echo  "instance : $my_port is recovered !!!!'"
    else
      echo  "instance : $my_port is not OK,PLS CHECK WITH MANUL !!!!'"
    fi
 done 
}
repair_1594 $PORT 

exit 0
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL Linux
Linux连接MySQL时的错误:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
连接本地的MySQL数据库引擎时候出现的错误。用mysql_error()函数获取到错误提示:
|
关系型数据库 MySQL Windows
Windows安装Mysql,服务无法启动,错误1053处理
在Windows7操作系统,部署mysql的时候, 无法启动Mysql服务 错误1053:服务没有及时响应启动或控制请求。 以下整理了处理的详细过程
1280 0
Windows安装Mysql,服务无法启动,错误1053处理
|
存储 关系型数据库 MySQL
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
1137 0
MySQL出现Data too long for column...(错误号1406)和 Data truncated for column...(错误号1265)
|
数据可视化 关系型数据库 MySQL
mysql:解压版MySQL通过SQLyog可视化密码过期问题(错误号码1862)
mysql:解压版MySQL通过SQLyog可视化密码过期问题(错误号码1862)
423 0
mysql:解压版MySQL通过SQLyog可视化密码过期问题(错误号码1862)
|
关系型数据库 MySQL 数据库
MySQL无法启动的问题->MySQL 服务正在启动 . MySQL 服务无法启动。服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助
注意以上的操作会清除数据库内容及已经创建的数据库用户,会生成一个新的用户root,此用户没有密码🐱‍🏍
423 0
MySQL无法启动的问题->MySQL 服务正在启动 . MySQL 服务无法启动。服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助
|
关系型数据库 MySQL 网络安全
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
234 0
【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
|
关系型数据库 MySQL C++
安装MySQL时报由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题错误
安装MySQL时报由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题错误
安装MySQL时报由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题错误
|
关系型数据库 MySQL 数据库
Navicat连接MySQL数据库报2059错误如何解决?
Navicat连接MySQL数据库报2059错误如何解决?
304 0
Navicat连接MySQL数据库报2059错误如何解决?
|
SQL 关系型数据库 MySQL
mysql操作中 出现You can‘t specify target table for update in FROM clause错误的解决方法
这个错误实际上也不能称之为咱们sql语句写的不行,实际上是我们在一些细节上没有遵循mysql的语法规范。 问题所在:我们一个sql语句中先select这个表,然后再update这个表的内容。 错误示范: UPDATE StuCose SET Grade=60 WHERE Sno IN( SELECT Sno FROM stucose WHERE Grade<=ALL( SELECT MIN(Grade) FROM stucos
509 0
|
关系型数据库 MySQL 数据库
nivicat复制mysql数据库[Err] [Dtf] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'错误
问题的原因是两个数据库待转移的表的字符格式不能被被转移数据库识别。例如mysql8的utf8mb4_0900_ai_ci格式再mysql5中就不支持。就需要更改数据库字符编码和各个varchar等字段的编码方式
268 0
nivicat复制mysql数据库[Err] [Dtf] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'错误