主的MYSQL有事件每隔一段1分钟调用存储过程从而操作主数据库,主数据库的记录变化,从的也跟着变化。
问题来了:
show master status;
show slave status;             Slave_IO_Running: Yes
            Slave_SQL_Running: Yesshow variables like '%event%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
主从的状态都正常,而且我在主数据库进行操作的时候,从的数据库完全可以正常同步
为什么会经常性的不事件同步?按道理本来是每隔1分钟就会出现从表有数据改变的!
这个问题问了好几次了,没有解决方法,每次都要重启主的才可以,很麻烦。

解决方案 »

  1.   

    select status from mysql.event;
    master上的应该是enables,slave应该是'SLAVESIDE_DISABLED'
    Field: status
       Type: enum('ENABLED','DISABLED','SLAVESIDE_DISABLED')
       Null: NO
        Key: 
    Default: ENABLED
      

  2.   

    对于事件EVENT来说,在主上执行时,写入到BINLOG的是EVENT里面具体的SQL语句,EVENT只是负责调度,如果这个EVENT在从上也是ENABLED状态,就会出现SQL在从上执行2次(1次MASTER同步的,1次是SLAVE自己调度的),这个需要特别注意。事件不执行,这个问题以前也看到过别人提过,但是MYSQL文档里面没有做任何说明,EVENT推出已经很久了,使用的人也不少,这个问题是个基础的功能性问题,如果有BUG,早就大面积爆发了。
      

  3.   

    手动之下下 event_scheduler执行的sql语句看看
      

  4.   

    @zuoxingyu2012 你好,同步是正常的,从的事件是禁止的。@rucypli  手动event_scheduler,不是很明白,请教。
    以前是重启主的,现在使用
    SET GLOBAL event_scheduler=OFF;
    SET GLOBAL event_scheduler=ON;这个也可以激发事件正常同步。不过也很麻烦,想找到根本原因是什么
      

  5.   

    如下:
    CREATE EVENT eve_ABC ON SCHEDULE EVERY 1 MINUTE ON COMPLETION PRESERVE DO CALL PRO();调用的存储过程也很简单。不会是语句的原因,因为可以正常同步,只不过一段时间之后就偶尔会事件不触发了,我猜测是BUG,也可能是从数据库太多了,所以我再增加了一个新版本的MYSQL,把主数据库分成了2份。明天看是否再出现不同步的问题,如果出现的话,真没辙了。如果老版本MYSQL不同步,而新版本的MYSQL依然正常同步的话,那就应该是BUG