BUG#27779: Slave cannot read old rows log events.
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.
2008-01-10 16:39:44 +01:00
|
|
|
DROP TABLE IF EXISTS t1, t2, t3;
|
|
|
|
==== Read modern binlog (version 5.1.23) ====
|
|
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
a b
|
|
|
|
0 last_insert_id
|
|
|
|
1 one
|
|
|
|
3 last stm in trx: next event should be xid
|
|
|
|
4 four
|
|
|
|
674568 random
|
|
|
|
SELECT * FROM t2 ORDER BY a;
|
|
|
|
a b
|
|
|
|
3 first stm in trx
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
17920
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
==== Read binlog from version 5.1.17 ====
|
|
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
a b
|
|
|
|
0 last_insert_id
|
|
|
|
1 one
|
|
|
|
3 last stm in trx: next event should be xid
|
|
|
|
4 four
|
|
|
|
764247 random
|
|
|
|
SELECT * FROM t2 ORDER BY a;
|
|
|
|
a b
|
|
|
|
3 first stm in trx
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
17920
|
|
|
|
DROP TABLE t1, t2, t3;
|
2008-01-30 14:12:40 +01:00
|
|
|
==== Read binlog from version 4.1 ====
|
|
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
a b
|
|
|
|
0 last_insert_id
|
|
|
|
4 four
|
|
|
|
190243 random
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
17920
|
|
|
|
DROP TABLE t1, t3;
|
BUG#27779: Slave cannot read old rows log events.
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.
2008-01-10 16:39:44 +01:00
|
|
|
==== Read binlog from alcatel tree (mysql-5.1-wl2325-5.0-drop6) ====
|
|
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
a b
|
|
|
|
0 last_insert_id
|
|
|
|
1 one
|
|
|
|
3 last stm in trx: next event should be xid
|
|
|
|
4 four
|
|
|
|
781729 random
|
|
|
|
SELECT * FROM t2 ORDER BY a;
|
|
|
|
a b
|
|
|
|
3 first stm in trx
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
17920
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
==== Read binlog from ndb tree (mysql-5.1-telco-6.1) ====
|
|
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
a b
|
|
|
|
0 last_insert_id
|
|
|
|
1 one
|
|
|
|
3 last stm in trx: next event should be xid
|
|
|
|
4 four
|
|
|
|
703356 random
|
|
|
|
SELECT * FROM t2 ORDER BY a;
|
|
|
|
a b
|
|
|
|
3 first stm in trx
|
|
|
|
SELECT COUNT(*) FROM t3;
|
|
|
|
COUNT(*)
|
|
|
|
17920
|
|
|
|
DROP TABLE t1, t2, t3;
|