MySQL从库选项log-slave-updates未启用引发的异常.txt

最近核查一个基于从库复制某张特定的表到另外一个主库调整,未配置log-slave-updates导致表无法正常同步。我们的配置文件中使用了replicate-rewrite-db参数以及replicate_wild_do_table参数。具体场景见下面的描述。

1、环境介绍及问题由来
  DB1M(Master)  ---> DB1S(Slave)
  DB2M(Master)  ---> DB2S(Slave)
  现在的情形是需要将DB1M实例上的特定的表tbname上实时同步到DB2M实例
  为减轻DB1M上的压力,我们将DB1S作为DB2M的主库,即最终的拓扑结果如下:
  DB1M(tbname)  ---> DB1S(tbname) ---> DB2M(tbname) --->DB2S(tbname)
  在DB2M上配置了如下参数:
  replicate-rewrite-db=DB1->DB2
  replicate_wild_do_table=DB2.tbname
  经过上述配置后,将tbname表从DB1M一致性导出后同步到DB2M实例的DB2上
  配置完毕后,DB2M(Master)  ---> DB2S(Slave)上的表tbname并没有彻底同步,总是存在数据丢失的问题

2、分析
  a、DB1M(Master)  ---> DB1S(Slave)表tbname无异常,排除DB1S做为DB2M主存在问题的可能性
  b、DB1S(tbname) ---> DB2M(tbname)表tbname无异常,排除DB1S上启用的相关配置等
  b、DB2M(Master)  ---> DB2S(Slave)期间表tbname存在问题,也就是说应该是在DB2M上基于表tbname的dml日志并没有写入到binlog
  c、在DB2M上基于表tbname的dml日志是来源于DB1S产生的relay log,同步到DB2M(Master)上无异常,一定可以在relay log找到tbname的相关操作
  e、验证步骤c,再检查DB2M(Master)上是否有tbname的binlog,如果没有,一定是某个参数未设置或某个特定对的原因而导致在apply relay log时未添加到binlog

3、故障解决
  通过上述的分析及验证,果然发现在DB2M(Master)上丢失了参数log-slave-updates
  通过在DB2M(Master)添加作为从库的选项log-slave-updates后表tbname同步正常

4、有关log-slave-updates选项  
    log-slave-updates是一个全局非动态选项,其值为布尔型,即TRUE和FALSE。缺省为FALSE,修改该参数需要重启实例。

Normally, a slave does not log to its own binary log any updates that are received from a master server. This option tells the slave to log the updates performed by its SQL thread to its own binary log. For this option to have any effect, the slave must also be started with the --log-bin [2039] option to enable binary logging. Prior to MySQL 5.5, the server would not start when using the --log-slave-updates [2004] option without also starting the server with the --log-bin [2039] option, and would fail with an error; in MySQL 5.6, only a warning is generated. (Bug #44663) --log-slave-updates [2004] is used when you want to chain replication servers. For example, you might want to set up replication servers using this arrangement:

A -> B -> C

Here, A serves as the master for the slave B, and B serves as the master for the slave C. For this to work, B must be both a master and a slave. You must start both A and B with --log-bin [2039] to enable binary logging, and B with the --log-slave-updates [2004] option so that updates received from A are logged by B to its binary log.

时间: 01-10

MySQL从库选项log-slave-updates未启用引发的异常.txt的相关文章

mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理

年后回来查看mysql运行状况与备份情况,登录mysql从库查看主从同步状态 1 mysql> show slave status\G; 2 *************************** 1. row *************************** 3 Slave_IO_State: 4 Master_Host: 101.200.*.* 5 Master_User: backup 6 Master_Port: 3306 7 Connect_Retry: 60 8 Master_

【MySQL案例】error.log的Warning:If a crash happens thisconfiguration does not guarantee that the relay lo

1.1.1. If a crash happens thisconfiguration does not guarantee that the relay log info will be consistent [环境描述] msyql5.6.14 [报错信息] mysql的slave启动时,error.log中出现Warning警告: [Warning] Slave SQL: If a crash happensthis configuration does not guarantee tha

haproxy实现mysql从库负载均衡

本文主要讲述通过haproxy实现mysql从库间的负载均衡,至于mysql主从的搭建,本文不再重述,可以参考我之前写的博客. 1.首先下载haproxy包 wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.13.tar.gz 2.安装 tar zxvf haproxy-1.4.13.tar.gz cd haproxy-1.4.13/ make TARGET=linux26 PREFIX=/usr/local/haproxy ##我的

mysql主从库

http://wangwei007.blog.51cto.com/68019/965575 一.mysql主从的原理 1.Replication 线程 Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave).在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流

MySQL 建库、建用户及建表事项

1,MySQL建库语句比较简单,一句话: 1 create database tppamltest3 2,创建用户及授权: 1 insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","用户名",password("密码"),"","",""); 2

再谈MySQL全库备份

再谈MySQL全库备份 简介 Part1:写在最前 在很早之前,我写过一个MySQL生产库全库备份脚本,今天有同事问我是不是要再加一个-R参数来备份存储过程,理由的话是由于mysqldump --help中 关于存储过程的默认备份是false. routines                          FALSE MySQL生产库全库备份脚本 http://suifu.blog.51cto.com/9167728/1758022 实战 Part1:写在最前 我备份一般就三个参数 --s

php把图片存入mysql DATA库

php把图片存入mysql DATA库----在网站建设过程中,笔者与大家分享一下用php把图片存入mysqlDATA库中并在网页上显示的代码,具体如下: //保存图片到DATA库 If($Picture != "none") { $PSize = filesize($Picture); $mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize)); mysql_connect($host,$user

logstash multiline 过滤 mysql slowlog 和java log

在logstash的输出中,每行开头都会加上timestamp 因此,对于mysql slowlog和java log 多行输出格式,就显得画蛇添足了:不过,logstash提供了multiline 功能 filter {   # 如果是以# Time开头的就开始新一行            if [type] == 'slowlog' {       multiline {          what => next          pattern => "^# Time:&qu