mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
537c23e833
This patch adds the ability to store extra field metadata in the table map event. This data can include pack_length() or field_lenght() for fields such as CHAR or VARCHAR enabling developers to add code that can check for compatibilty between master and slave columns. More importantly, the extra field metadata can be used to store data from the master correctly should a VARCHAR field on the master be <= 255 bytes while the same field on the slave is > 255 bytes. The patch also includes the needed changes to unpack to ensure that data which is smaller on the master can be unpacked correctly on the slave. WL#3915 : (NDB) master's cols > slave Slave starts accepting and handling rows of master's tables which have more columns. The most important part of implementation is how to caclulate the amount of bytes to skip for unknown by slave column.
33 lines
1 KiB
Text
33 lines
1 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
create table t1 (a int);
|
|
insert into t1 values (10);
|
|
create table t2 (a int);
|
|
create table t3 (a int) engine=merge union(t1);
|
|
create table t4 (a int);
|
|
insert into t4 select * from t3;
|
|
rename table t1 to t5, t2 to t1;
|
|
flush no_write_to_binlog tables;
|
|
SHOW BINLOG EVENTS FROM 623 ;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
|
select * from t3;
|
|
a
|
|
flush tables;
|
|
SHOW BINLOG EVENTS FROM 623 ;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Query 1 # use `test`; rename table t1 to t5, t2 to t1
|
|
master-bin.000001 # Query 1 # use `test`; flush tables
|
|
select * from t3;
|
|
a
|
|
stop slave;
|
|
drop table t1;
|
|
flush tables with read lock;
|
|
start slave;
|
|
stop slave;
|
|
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
|
|
drop table t3, t4, t5;
|