MySQL5.1主从同步出现Relay log read failure错误解决方法,mysql5.1relay

众所周知MySQL5.1的Replication是比较烂的。MySQL的每一个版本更新关于同步方面每次都是可以看到一大堆。但MySQL
5.1性能是比较突出的。所以经不住诱惑使用MySQL
5.1。所以也要经常遇到一些Bug。如:

复制代码 代码如下:

mysql> show slave status\G
*************************** 1. row
***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.118
                  Master_User: repl_wu
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.005121
          Read_Master_Log_Pos: 64337286
               Relay_Log_File: relay-bin.003995
                Relay_Log_Pos: 18446697137031827760
        Relay_Master_Log_File: mysql-bin.005121
             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: 4
              Relay_Log_Space: 64337901
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1594
               Last_SQL_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.
1 row in set (0.00 sec)

从上面可以看到是中继日值或是Master上的日值出问题了。

首先如果是中继日值坏掉,那只需要找到同步的时间点,然后重新同步,这样就可以有新的中继日值了。如果Master上的日值坏了就麻烦了。

从经验来看,这是中继日值出问题了。处理方法:

需要找到同步的点。

日值为:Master_Log_File: mysql-bin.005121,Relay_Master_Log_File:
mysql-bin.005121以Relay_Master_Log_File为准,Master_Log_File为参考。

日值执行时间点:

复制代码 代码如下:

Exec_Master_Log_Pos: 4

那么现在就可以:

复制代码 代码如下:

mysql>stop slave;
 
mysql>change master to Master_Log_File=’mysql-bin.005121′,
Master_Log_Pos=4;
  
mysql>start slave;
 
mysql>show slave status\G;

进行确认。

建议:

在使用MySQL-5.1.36以下的版本的同学,请尽快升级到MySQL-5.1.40 &
MySQL-5.1.37sp1

众所周知MySQL5.1的Replication是比较烂的。MySQL的每一个版本更新关于同步方面每次都是可以看到一大堆。但MySQL
5.1性能是比较突出的。所以经不住诱惑使用MySQL
5.1。所以也要经常遇到一些Bug。如:

mysql怎实现主从同步数据库备份?

1.主服务器:
#Master start
   log-bin=”d:/log/mysql/mysql_log_bin”
  server-id=1
   #Master end
  2.从服务器:
#Slave start
log-bin=”D:/log/mysql2/log-bin.log”
relay_log=”D:/log/mysql2/relay-log-bin”
#从机id,区别于主机id
server-id=2
#主机ip,供从机连接主机用
#master-host=localhost
#主机端口
#master-port=3300
#刚才为从机复制主机数据新建的账号
#master-user=slave
#刚才为从机复制主机数据新建的密码
#master-password=654321
#重试间隔时间10秒
#master-connect-retry=10
#需要同步的数据库
#replicate-do-db=test
#启用从库日志,这样可以进行链式复制
log-slave-updates
#从库是否只读,0表示可读写,1表示只读
read-only=1

#只复制某个表
#replicate-do-table=tablename
#只复制某些表(可用匹配符)
#replicate-wild-do-table=tablename%
#只复制某个库
#replicate-do-db=dbname
#不复制某个表
#replicate-ignore-table=tablename
#不复制某些表
#replicate-wild-ignore-table=tablename%
#不复制某个库
#replicate-ignore-db=dbname
#Slave end
3.对从服务器制定主服务器使用CHANGE MASTER 语句
注意:1.一定要在主服务器上创建一个可以执行replication的用户
2.该用户名在从服务器上可远程登录到主服务器。
3.开启MySQL的log-bin日志功能
参考资料:blog.163.com/…31959/
 

复制代码 代码如下:

怎检查MySQL数据库的主从延时?

MySQL数据库主从延时如何去判断呢?本文我们介绍了两种判断方法:1.
Seconds_Behind_Master vs 2.
mk-heartbeat,接下来我们就分别介绍这些内容。
日常工作中,对于MySQL主从复制检查,一方面我们要保证复制的整体结构是否正常,另一方面需要检查主从数据是否保持一致。对于前者我们可以通过监控复制线程是否工作正常以及主从延时是否在容忍范围内,对于后者则可以通过分别校验主从表中数据的md5码是否一致,来保证数据一致,可以使用Maatkit工具包中的mk-table-
checksum工具去检查。 方法1: 通过监控show slave
status\G命令输出的Seconds_Behind_Master参数的值来判断,是否有发生主从延时。其值有这么几种:
NULL —
表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes。
0 —
该值为零,是我们极为渴望看到的情况,表示主从复制良好,可以认为lag不存在。
正值— 表示主从已经出现延时,数字越大表示从库落后主库越多。 负值—
几乎很少见,我只是听一些资深的DBA说见过,其实,这是一个BUG值,该参数是不支持负值的,也就是不应该出现。
show slave
status\G,该命令的输出结果非常丰厚,给我们的监控提供了很多有意义的参数,比如:Slave_IO_Running该参数可作为
io_thread的监控项,Yes表示io_thread的和主库连接正常并能实施复制工作,No则说明与主库通讯异常,多数情况是由主从间网络引起的问题;Slave_SQL_Running该参数代表sql_thread是否正常,具体就是语句是否执行通过,常会遇到主键重复或是某个表不存在。下面就说到今天的重点Seconds_Behind_Master,该值作为判断主从延时的指标,那么它又是怎么得到这个值的呢,同时,它为什么又受到很多人的质疑?
Seconds_Behind_Master是通过比较sql_thread执行的event的timestamp和
io_thread复制好的event的timestamp(简写为ts)进行比较,而得到的这么一个差值。我们都知道的relay-log和主库的
bin-log里面的内容完全一样,在记录sql语句的同时会被记录上当时的ts,所以比较参考的值来自于binlog,其实主从没有必要与NTP进行同步,也就是说无需保证主从时钟的一致。
你也会发现,其实比较真正是发生在io_thread与sql_thread之间,而io_thread才真正与主库有关联,于是,问题就出来了,当主库I/O负载很大或是网络阻塞,io_thread不能及时复制binlog(没有中断,也在复制),而
sql_thread一直都能跟上io_thread的脚本,这时Seconds_Behind_Master的值是0,也就是我们认为的无延时,但是,实际上不是,你懂得。这也就是为什么大家要批判用这个参数来监控数据库是否发生延时不准的原因,但是这个值并不是总是不准,如果当io_thread与
master网络很好的情况下,那么该值也是很有价值的。
之前,提到Seconds_Behind_Master这个参数会有负值出现,我们已经知道该值是io_thread的最近跟新的ts与sql_thread执行到的ts差值,前者始终是大于后者的,唯一的肯能就是某个event的ts发生了错误,比之前的小了,那么当这种情况……余下全文>>
 

log read
failure错误解决方法,mysql5.1relay
众所周知MySQL5.1的Replication是比较烂的。MySQL的每一个版本更新关于同步方面…

mysql> show slave status\G
*************************** 1. row
***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.118
                  Master_User: repl_wu
                  Master_美洲杯竞猜 ,Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.005121
          Read_Master_Log_Pos: 64337286
               Relay_Log_File: relay-bin.003995
                Relay_Log_Pos: 18446697137031827760
        Relay_Master_Log_File: mysql-bin.005121
             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: 4
              Relay_Log_Space: 64337901
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1594
               Last_SQL_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.
1 row in set (0.00 sec)

从上面可以看到是中继日值或是Master上的日值出问题了。

首先如果是中继日值坏掉,那只需要找到同步的时间点,然后重新同步,这样就可以有新的中继日值了。如果Master上的日值坏了就麻烦了。

从经验来看,这是中继日值出问题了。处理方法:

需要找到同步的点。

日值为:Master_Log_File: mysql-bin.005121,Relay_Master_Log_File:
mysql-bin.005121以Relay_Master_Log_File为准,Master_Log_File为参考。

日值执行时间点:

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注