你说的这种情况基本不太可能请确定主从表结构完全一致,并且show slave status正常

解决方案 »

  1.   


    您好!从表是主表备份恢复的,status正常,因为其他所有表和数据都是能够正常实时备份到从表的,就有两张表的部分插入数据不正常。查了很久才发现是一些insert操作没有记录到binlog文件里,所以无法同步到从机。首先是binlog里就没有部分insert,感觉跟主从同步不同步还没有关系。挠头好几天了,也没有解决思路。希望高手指点
      

  2.   

    还没碰到过master插入数据  而binlog没有记录的,而且还是只针对特定一个表没有记录binlog
    能重现吗  不能重现先把数据整同步  
      

  3.   

    复制的过滤主要有2种方式: 
    1,在主服务器在把事件从进二制日志中过滤掉,相关的参数是:binlog_do_db和binlog_ignore_db。 
    2,在从服务器上把事件从中继日志中过滤掉,相关的参数是replicate_*。 复制只能扩展读取,不能扩展写入,对数据进行分区可以进行扩展写入。 复制常见的问题: 
    一,从服务器到底落后于主服务器多少?用Maatkit工具里面的mk-heartbeat脚本。 
    二,如何确定主从服务器的数据是否一致?用Maatkit工具里面的mk-table-checksum脚本。 复制的优化: 在mysql复制环境中,有8个参数可以让我们控制,需要复制或需要忽略不进行复制的DB或table分别为: 
    下面二项需要在Master上设置: 
    Binlog_Do_DB:设定哪些数据库需要记录Binlog 
    Binlog_Ignore_DB:设定哪里数据库不需要记录Binlog 优点是Master端的Binlog记录所带来的Io量减少,网络IO减少,还会让slave端的IO线程,SQL线程减少,从而大幅提高复制性能, 
    缺点是mysql判断是否需要复制某个事件不是根据产生该事件的查询所在的DB,而是根据执行查询时刻所在的默认数据库(也就是登录时指定的库名或运行"use database"中指定的DB),只有当前默认DB和配置中所设定的DB完全吻合时IO线程才会将该事件读取给slave的IO线程.所以,如果在默认DB和设定须要复制的DB不一样的情况下改变了须要复制的DB中某个Table中的数据,该事件是不会被复制到Slave中去的,这样就会造成Slave端的数据和Master的数据不一致.同样,在默认的数据库下更改了不须要复制的数据库中的数据,则会被复制到slave端,当slave端并没有该数据库时,则会造成复制出错而停止. 下面六项需要在slave上设置: 
    Replicate_Do_DB:设定需要复制的数据库,多个DB用逗号分隔 
    Replicate_Ignore_DB:设定可以忽略的数据库. 
    Replicate_Do_Table:设定需要复制的Table 
    Replicate_Ignore_Table:设定可以忽略的Table 
    Replicate_Wild_Do_Table:功能同Replicate_Do_Table,但可以带通配符来进行设置。 
    Replicate_Wild_Ignore_Table:功能同Replicate_Do_Table,功能同Replicate_Ignore_Table,可以带通配符。 优点是在slave端设置复制过滤机制,可以保证不会出现因为默认的数据库问题而造成Slave和Master数据不一致或复制出错的问题. 
    缺点是性能方面比在Master端差一些.原因在于:不管是否须要复制,事件都会被IO线程读取到Slave端,这样不仅增加了网络IO量,也给Slave端的IO线程增加了Relay Log的写入量.
      

  4.   

    指定数据局同步
    假如您配置的是同步数据库database-A
    但您连接默认的数据库不是database-A,如下面的插入的语句
    use database-B;
    insert into database-A.table values(...)这种binlog是不会记录到database-A中的;所以主从就不一致
    全部同步则没有这个问题
      

  5.   

    Replicate_Ignore_DB  肯定是这里设置了,所以被过滤了,不录入到binlog里面了啊。