[MCOL-4955] [cross-engine] insert into innodbtable select * columnstoretable will not be replicated. Created: 2022-01-05  Updated: 2023-08-10

Status: Open
Project: MariaDB ColumnStore
Component/s: cache_insert, N/A
Affects Version/s: 5.6.2, 6.4.1, 23.02.4
Fix Version/s: Icebox

Type: Bug Priority: Major
Reporter: Richard Stracke Assignee: Unassigned
Resolution: Unresolved Votes: 1
Labels: insert_into, replication

Issue Links:
Relates
relates to MCOL-4264 [Cross-Engine] UPDATE to INNODB table... Closed

 Description   

to reproduce:

follow

Docker-Compose Cluster Instructions

https://github.com/mariadb-corporation/mariadb-enterprise-columnstore-docker

docker exec -it mcs1 bash
mariadb

 create database if not exists d1;
 use d1;
 create table if not exists t1 (id int);
 create table if not exists t2 (id int) engine=columnstore;
 truncate table t1;
 truncate table t2;
 insert into t2 (id) values(1);
 insert into t1 select * from t2;
 select * from t1;

MariaDB [d1]>  select * from t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.001 sec)

but on mcs2

docker exec -it mcs1 bash
mariadb

MariaDB [d1]> select * from t1;
Empty set (0.000 sec)

It works with adding "limit" clause.

with "limit" cluase, it will be written into binlog as in binlogformat ROW

 #220105  8:18:39 server id 4  end_log_pos 1149 CRC32 0x5ee8511d         GTID 0-4-62 trans
/*!100001 SET @@session.gtid_seq_no=62*//*!*/;
START TRANSACTION
/*!*/;
# at 1149
# at 1212
#220105  8:18:39 server id 4  end_log_pos 1212 CRC32 0xc036c4b3         Annotate_rows:
#Q> insert into t1 select * from t2 limit 10
#220105  8:18:39 server id 4  end_log_pos 1255 CRC32 0xd5cbf0e7         Table_map: `d1`.`t1` mapped to number 20
# at 1255
#220105  8:18:39 server id 4  end_log_pos 1293 CRC32 0x3b885426         Write_rows: table id 20 flags: STMT_END_F
 
BINLOG '
X1TVYRMEAAAAKwAAAOcEAAAAABQAAAAAAAEAAmQxAAJ0MQABAwAB5/DL1Q==
X1TVYRcEAAAAJgAAAA0FAAAAABQAAAAAAAEAAf/+AQAAACZUiDs=
'/*!*/;
### INSERT INTO `d1`.`t1`
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
# Number of rows: 1
# at 1293
#220105  8:18:39 server id 4  end_log_pos 1324 CRC32 0x9053a62c         Xid = 58
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;

Without as statement

/*!100001 SET @@session.gtid_seq_no=61*//*!*/;
START TRANSACTION
/*!*/;
# at 980
#220105  8:07:19 server id 4  end_log_pos 1076 CRC32 0xaff93e02         Query   thread_id=9     exec_time=2     error_code=0
SET TIMESTAMP=1641370039/*!*/;
insert into t1 select * from t2
/*!*/;
# at 1076
#220105  8:07:19 server id 4  end_log_pos 1107 CRC32 0xef892fc5         Xid = 48
COMMIT/*!*/;



 Comments   
Comment by Richard Stracke [ 2022-01-06 ]

workarround:

Execute previously

SET SESSION binlog_format = 'ROW';

and it works without "limit" clause

Generated at Thu Feb 08 02:54:16 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.