Bug #48776 row based replication breaks with spatial / geometry types, cause crashes!
Submitted: 14 Nov 2009 17:58 Modified: 29 Nov 2010 13:55
Reporter: Shane Bester (Platinum Quality Contributor) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Row Based Replication ( RBR ) Severity:S1 (Critical)
Version:5.1.40, 5.1.42 OS:Any
Assigned to: Zhenxing He CPU Architecture:Any

[14 Nov 2009 17:58] Shane Bester
Description:
geometry types are not handled properly by row based replication.
the testcase in 'how to repeat' causes this error on slave:

[ERROR] Slave SQL: Table definition on master and slave does not match: Column 1 size mismatch - master has size 65284, test.t0 on slave has size 255. Master's column size should be <= the slave's column size. Error_code: 1535

How to repeat:
#setup a master/slave with --binlog-format=row on master.
#run this on master, then watch the slave error.

drop table if exists `t0`;
create table `t0`(
`col2` multipoint not null ,
`col7` varchar(255))
;

insert ignore into `t0` set 
`col2`=geomfromtext('multipoint(1 1)'),
`col7`='20320';
[14 Nov 2009 18:06] Valeriy Kravchuk
Verified just as described:

77-52-1-11:mysql-test openxs$ ./mysql-test-run.pl --suite=rpl rpl_bug48776
Logging: ./mysql-test-run.pl  --suite=rpl rpl_bug48776
091114 20:03:54 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/dX/dXCzvuSlHX4Op1g-o1jIWk+++TI/-Tmp-/RjYve3glE4/ is case insensitive
091114 20:03:54 [Note] Plugin 'FEDERATED' is disabled.
091114 20:03:54 [Note] Plugin 'ndbcluster' is disabled.
MySQL Version 5.1.42
Checking supported features...
 - using ndbcluster when necessary, mysqld supports it
 - SSL connections supported
 - binaries are debug compiled
Collecting tests...
 - adding combinations for rpl
vardir: /Users/openxs/dbs/5.1/mysql-test/var
Checking leftover processes...
Removing old var directory...
Creating var directory '/Users/openxs/dbs/5.1/mysql-test/var'...
Installing system database...
Using server port 50077

==============================================================================

TEST                                      RESULT   TIME (ms)
------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009
rpl.rpl_bug48776 'row'                   [ fail ]
        Test ended at 2009-11-14 20:04:02

CURRENT_TEST: rpl.rpl_bug48776
=== SHOW MASTER STATUS ===
---- 1. ----
File	slave-bin.000001
Position	325
Binlog_Do_DB	
Binlog_Ignore_DB	
==========================

=== SHOW SLAVE STATUS ===
---- 1. ----
Slave_IO_State	Waiting for master to send event
Master_Host	127.0.0.1
Master_User	root
Master_Port	13000
Connect_Retry	1
Master_Log_File	master-bin.000001
Read_Master_Log_Pos	581
Relay_Log_File	slave-relay-bin.000003
Relay_Log_Pos	471
Relay_Master_Log_File	master-bin.000001
Slave_IO_Running	Yes
Slave_SQL_Running	No
Replicate_Do_DB	
Replicate_Ignore_DB	
Replicate_Do_Table	
Replicate_Ignore_Table	
Replicate_Wild_Do_Table	
Replicate_Wild_Ignore_Table	
Last_Errno	1535
Last_Error	Table definition on master and slave does not match: Column 1 size mismatch - master has size 65284, test.t0 on slave has size 255. Master's column size should be <= the slave's column size.
Skip_Counter	0
Exec_Master_Log_Pos	325
Relay_Log_Space	882
Until_Condition	None
Until_Log_File	
Until_Log_Pos	0
Master_SSL_Allowed	No
Master_SSL_CA_File	
Master_SSL_CA_Path	
Master_SSL_Cert	
Master_SSL_Cipher	
Master_SSL_Key	
Seconds_Behind_Master	
Master_SSL_Verify_Server_Cert	No
Last_IO_Errno	0
Last_IO_Error	
Last_SQL_Errno	1535
Last_SQL_Error	Table definition on master and slave does not match: Column 1 size mismatch - master has size 65284, test.t0 on slave has size 255. Master's column size should be <= the slave's column size.

...

analyze: sync_with_master
mysqltest: At line 16: sync_with_master failed: 'select master_pos_wait('master-bin.000001', 581, 300)' returned NULL indicating slave SQL thread failure

The result from queries just before the failure was:
< snip >
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop table if exists `t0`;
Warnings:
Note	1051	Unknown table 't0'
create table `t0`(
`col2` multipoint not null ,
`col7` varchar(255))
;
insert ignore into `t0` set 
`col2`=geomfromtext('multipoint(1 1)'),
`col7`='20320';
...
[15 Nov 2009 8:25] MySQL Verification Team
Tiny modification to the original testcase - using >255 length varchar in the same table, the slave can crash! (see cutted valgrind output);

drop table if exists `t0`;
create table `t0`(
`col2` multipoint not null ,
`col7` varchar(256))
;

insert ignore into `t0` set 
`col2`=geomfromtext('multipoint(1 1)'),
`col7`='20320';

Thread 12:
Invalid read of size 4
at: Field_blob::unpack (field.cc:7695)
by: unpack_row(rpl_record.cc:242)
by: Rows_log_event::write_row(log_event.h:3549)
by: Write_rows_log_event::do_exec_row (log_event.cc:8641)
by: Rows_log_event::do_apply_event(log_event.cc:7414)
by: apply_event_and_update_pos(log_event.h:1059)
by: handle_slave_sql (slave.cc:2281)
by: start_thread (in /lib/libpthread-2.5.so)
by: clone (in /lib/libc-2.5.so)
 Address 0x741d076 is 0 bytes after a block of size 46 alloc'd
at: malloc (vg_replace_malloc.c:195)
by: my_malloc (my_malloc.c:34)
by: Rows_log_event::Rows_log_event(log_event.cc:7082)
by: Write_rows_log_event::Write_rows_log_event(log_event.cc:8248)
by: Log_event::read_log_event(log_event.cc:1275)
by: Log_event::read_log_event(log_event.cc:1124)
by: handle_slave_sql (slave.cc:4098)
by: start_thread (in /lib/libpthread-2.5.so)
by: clone (in /lib/libc-2.5.so)

Invalid read of size 1
at: Field_varstring::unpack(field.cc:7415)
by: unpack_row (rpl_record.cc:242)
by: Rows_log_event::write_row(log_event.h:3549)
by: Write_rows_log_event::do_exec_row(log_event.cc:8641)
by: Rows_log_event::do_apply_event(log_event.cc:7414)
by: apply_event_and_update_pos(log_event.h:1059)
by: handle_slave_sql (slave.cc:2281)
by: start_thread (in /lib/libpthread-2.5.so)
by: clone (in /lib/libc-2.5.so)
 Address 0x741d07a is 4 bytes after a block of size 46 alloc'd
at: malloc (vg_replace_malloc.c:195)
by: my_malloc (my_malloc.c:34)
by: Rows_log_event::Rows_log_event(log_event.cc:7082)
by: Write_rows_log_event::Write_rows_log_event(log_event.cc:8248)
by: Log_event::read_log_event(log_event.cc:1275)
by: Log_event::read_log_event(log_event.cc:1124)
by: handle_slave_sql (slave.cc:4098)
by: start_thread (in /lib/libpthread-2.5.so)
by: clone (in /lib/libc-2.5.so)
[30 Dec 2009 8:59] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/95807

3289 He Zhenxing	2009-12-30
      Bug#48776 row based replication breaks with spatial / geometry types, cause crashes!
      
      This bug is the same problem as Bug 49836 for 5.1 versions.
     @ sql/rpl_utility.h
        Add missing case MYSQL_TYPE_GEOMETRY
[30 Dec 2009 9:04] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/95808

3289 He Zhenxing	2009-12-30
      Bug#48776 row based replication breaks with spatial / geometry types, cause crashes!
      
      This bug is the same problem as Bug 49836 for 5.1 versions.
     @ mysql-test/suite/rpl/r/rpl_geometry.result
        Test case for bug 48776
     @ mysql-test/suite/rpl/t/rpl_geometry.test
        Test case for bug 48776
     @ sql/rpl_utility.h
        Add missing case MYSQL_TYPE_GEOMETRY
[30 Dec 2009 9:06] Zhenxing He
Bug#43784 is marked as duplicate of this bug
[30 Dec 2009 9:14] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/95809

3289 He Zhenxing	2009-12-30
      Bug#48776 row based replication breaks with spatial / geometry types, cause crashes!
      
      This bug is the same problem as Bug 49836 for 5.1 versions.
     @ mysql-test/suite/rpl/r/rpl_geometry.result
        Test case for bug 48776
     @ mysql-test/suite/rpl/t/rpl_geometry.test
        Test case for bug 48776
     @ sql/rpl_utility.h
        Add missing case MYSQL_TYPE_GEOMETRY
[5 Jan 2010 6:26] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/95920

3303 He Zhenxing	2010-01-05
      Bug#48776 row based replication breaks with spatial / geometry types, cause crashes!
      
      This bug is the same problem as Bug 49836 for 5.1 versions.
     @ mysql-test/suite/rpl/r/rpl_geometry.result
        Test case for bug 48776
     @ mysql-test/suite/rpl/t/rpl_geometry.test
        Test case for bug 48776
     @ sql/rpl_utility.h
        Add missing case MYSQL_TYPE_GEOMETRY
[7 Jan 2010 9:02] Zhenxing He
see also bug#49836
[15 Jan 2010 8:58] Bugs System
Pushed into 5.1.43 (revid:joro@sun.com-20100115085139-qkh0i0fpohd9u9p5) (version source revid:zhenxing.he@sun.com-20100105062529-yo2ol9f9iwse2tn0) (merge vers: 5.1.42) (pib:16)
[22 Jan 2010 1:33] Paul DuBois
Noted in 5.1.43 changelog.

Spatial data types cause row-based replication to crash.

Setting report to NDI pending push to 5.5.x+.
[5 Feb 2010 11:45] Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100204063540-9czpdmpixi3iw2yb) (version source revid:alik@sun.com-20100119163614-172adculixyu26j5) (pib:16)
[5 Feb 2010 11:51] Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20100205113942-oqovjy0eoqbarn7i) (version source revid:alik@sun.com-20100204064210-ljwanqvrjs83s1gq) (merge vers: 6.0.14-alpha) (pib:16)
[5 Feb 2010 11:57] Bugs System
Pushed into 5.5.2-m2 (revid:alik@sun.com-20100203172258-1n5dsotny40yufxw) (version source revid:alexey.kopytov@sun.com-20100115112653-e3a24041ag1cv6v3) (merge vers: 5.5.1-m2) (pib:16)
[5 Feb 2010 17:03] Paul DuBois
Noted in 5.5.2, 6.0.14 changelogs.

Setting report to Need Merge pending push to Celosia.
[12 Mar 2010 14:10] Bugs System
Pushed into 5.1.44-ndb-7.0.14 (revid:jonas@mysql.com-20100312135944-t0z8s1da2orvl66x) (version source revid:jonas@mysql.com-20100312115609-woou0te4a6s4ae9y) (merge vers: 5.1.44-ndb-7.0.14) (pib:16)
[12 Mar 2010 14:26] Bugs System
Pushed into 5.1.44-ndb-6.2.19 (revid:jonas@mysql.com-20100312134846-tuqhd9w3tv4xgl3d) (version source revid:jonas@mysql.com-20100312060623-mx6407w2vx76h3by) (merge vers: 5.1.44-ndb-6.2.19) (pib:16)
[12 Mar 2010 14:40] Bugs System
Pushed into 5.1.44-ndb-6.3.33 (revid:jonas@mysql.com-20100312135724-xcw8vw2lu3mijrhn) (version source revid:jonas@mysql.com-20100312103652-snkltsd197l7q2yg) (merge vers: 5.1.44-ndb-6.3.33) (pib:16)
[12 Mar 2010 16:48] Paul DuBois
Fixed in earlier 5.1.x, 5.5.x.
[10 Nov 2010 8:31] Roel Van de Paar
Possible workaround may be to use STATEMENT or MIXED based replication.
[23 Nov 2010 14:13] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124739

3338 Martin Skold	2010-11-23
      Bug#51996 rpl_geometry fails in mysql-5.1-telco-6.3: Patch for bug#48776 was not merge in correctly
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[23 Nov 2010 14:46] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124741

3978 Martin Skold	2010-11-23 [merge]
      Merge
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[23 Nov 2010 14:58] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124742

3968 Martin Skold	2010-11-23 [merge]
      Merge
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[23 Nov 2010 15:08] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124744

3343 Martin Skold	2010-11-23 [merge]
      Merge
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[23 Nov 2010 15:08] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124745

3989 Martin Skold	2010-11-23 [merge]
      Merge
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[23 Nov 2010 15:09] Bugs System
Pushed into mysql-5.1-telco-6.3 5.1.51-ndb-6.3.40 (revid:martin.skold@mysql.com-20101123150732-eof49yrm5oaldu5e) (version source revid:martin.skold@mysql.com-20101123150732-eof49yrm5oaldu5e) (merge vers: 5.1.51-ndb-6.3.40) (pib:21)
[23 Nov 2010 15:09] Bugs System
Pushed into mysql-5.1-telco-7.0 5.1.51-ndb-7.0.21 (revid:martin.skold@mysql.com-20101123150644-iiwqfy6gupp41otp) (version source revid:martin.skold@mysql.com-20101123150644-iiwqfy6gupp41otp) (merge vers: 5.1.51-ndb-7.0.21) (pib:21)
[23 Nov 2010 15:13] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/124748

4014 Martin Skold	2010-11-23 [merge]
      Merge
      modified:
        mysql-test/suite/rpl/t/disabled.def
        sql/rpl_utility.cc
[29 Nov 2010 13:55] Martin Skold
Closing.
Bug was re-opened by mistake (referenced in commit for bug#51996)