• unknown's avatar
    BUG#27779: Slave cannot read old rows log events. · 3a6e84a2
    unknown authored
    Problem: Replication fails when master is mysql-5.1-wl2325-5.0-drop6 and
    slave is mysql-5.1-new-rpl. The reason is that, in
    mysql-5.1-wl2325-5.0-drop6, the event type id's were different than in
    mysql-5.1-new-rpl.
    Fix (in mysql-5.1-new-rpl):
     (1) detect that the server that generated the events uses the old
    format, by checking the server version of the format_description_log_event
    This patch recognizes mysql-5.1-wl2325-5.0-drop6p13-alpha,
    mysql-5.1-wl2325-5.0-drop6, mysql-5.1-wl2325-5.0, mysql-5.1-wl2325-no-dd.
     (2) if the generating server is old, map old event types to new event
    types using a permutation array.
    
    I've also added a test case which reads binlogs for four different
    versions.
    
    
    mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001:
      BitKeeper file /home/sven/bk/b27779-old_row_events/5.1-new-rpl/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-telco.000001
    mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001:
      BitKeeper file /home/sven/bk/b27779-old_row_events/5.1-new-rpl/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_row.000001
    mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001:
      BitKeeper file /home/sven/bk/b27779-old_row_events/5.1-new-rpl/mysql-test/suite/binlog/std_data/binlog_old_version_5_1-wl2325_stm.000001
    mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001:
      BitKeeper file /home/sven/bk/b27779-old_row_events/5.1-new-rpl/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_17.000001
    mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001:
      BitKeeper file /home/sven/bk/b27779-old_row_events/5.1-new-rpl/mysql-test/suite/binlog/std_data/binlog_old_version_5_1_23.000001
    sql/log_event.cc:
      Added code to read events generated by
      mysql-5.1-wl2325-5.0-drop6p13-alpha, mysql-5.1-wl2325-5.0-drop6,
      mysql-5.1-wl2325-5.0, mysql-5.1-wl2325-no-dd.
      More precisely, the event type id's had different numbers in
      those versions. To fix, we add a permutation array which maps old_id to
      new_id when the format_description_log_event indicates that the
      originating server is of the old type. We also need to permute the
      post_header_len array accordingly.
    sql/log_event.h:
      sql/log_event.h@1.169, 2008-01-09 11:34:37+01:00, sven@riska.(none) +5 -1
      Added declaration needed in log_event.cc. Also, the destructor of
      Format_description_log_event is sometimes called when post_header_len is
      null, so we must pass the MY_ALLOW_ZERO_PTR flag to my_free.
    mysql-test/suite/binlog/r/binlog_old_versions.result:
      Result file for new test.
    mysql-test/suite/binlog/t/binlog_old_versions.test:
      New test case that loads binlogs from several old versions.
    3a6e84a2
binlog_old_versions.result 1.16 KB