当mysql开启二进制选项时候,设置binlog-format=row的时候,因为row模式是记录表的行更改情况,
不知道这些对应的语句写入binlog时候,这些语句是怎么生成的,是根据什么生成的,是不是根据重做日志生成的,就是redo日志生成的,等到事务commit的时候再写入二进制文件中。
不知道我理解的对不对。

解决方案 »

  1.   

    与REDO日志无关,是直接生成的,根据SQL语句来生成
      

  2.   


    如果是STATEMENT模式和mixed模式下,我还可以理解成根据sql语句生成的,但是row模式下,
    假如update from t set f1=1;这种情况怎么根据sql语句生成呢,
    我看过里面二进制里面的内容,都是记录了每条记录当前行的所有字段的情况,
    如果说是根据sql语句来生成,我觉得太难理解了,我觉得更有可能是根据redo日志来生成的。
      

  3.   

    没去看源代码和帮助中的具体说明,但肯定不是REDO日志来的,因为MYISAM根本就没有REDO日志。猜想是,MYSQL在执行语句的时候,把相应的行的原数据保存下来。
      

  4.   

    不会是原数据吧,相反更有可能是新数据,否则如果新库,就insert了一下,根据binlog进行master slave copy的话,怎么可能成功呢?