mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-34647 : 'INSERT...SELECT' on MyISAM table suddenly replicated by Galera
Replication of MyISAM and Aria DML is experimental and best effort only. Earlier change make INSERT SELECT on both MyISAM and Aria to replicate using TOI and STATEMENT replication. Replication should happen only if user has set needed wsrep_mode setting. Note: This commit contains additional changes compared to those already made for the 10.5 branch. + small refactoring after main fix. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
This commit is contained in:
committed by
Julius Goryavsky
parent
b1f7522170
commit
a50a5e0f3b
@@ -39,7 +39,7 @@ id val
|
|||||||
7 d
|
7 d
|
||||||
9 d
|
9 d
|
||||||
11 d
|
11 d
|
||||||
set global wsrep_mode=REPLICATE_MYISAM;
|
set global wsrep_mode='REPLICATE_MYISAM,REPLICATE_ARIA';
|
||||||
create table t4(id serial, val varchar(100)) engine=myisam;
|
create table t4(id serial, val varchar(100)) engine=myisam;
|
||||||
insert into t4 values(null, 'a');
|
insert into t4 values(null, 'a');
|
||||||
insert into t4 values(null, 'b');
|
insert into t4 values(null, 'b');
|
||||||
@@ -95,6 +95,7 @@ id val
|
|||||||
4 d
|
4 d
|
||||||
5 d
|
5 d
|
||||||
6 d
|
6 d
|
||||||
|
set global wsrep_mode=default;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
drop table t1,t2,t3,t4,t5;
|
drop table t1,t2,t3,t4,t5;
|
||||||
set global wsrep_mode=default;
|
set global wsrep_mode=default;
|
||||||
|
@@ -17,12 +17,14 @@ SELECT * FROM s;
|
|||||||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||||
1 1 9223372036854775806 1 1 1000 0 0
|
1 1 9223372036854775806 1 1 1000 0 0
|
||||||
connection node_2;
|
connection node_2;
|
||||||
|
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
a
|
a
|
||||||
SELECT * FROM s;
|
SELECT * FROM s;
|
||||||
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
||||||
1 1 9223372036854775806 1 1 1000 0 0
|
1 1 9223372036854775806 1 1 1000 0 0
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP SEQUENCE s;
|
DROP SEQUENCE s;
|
||||||
# Case 2 REPLACE INTO ... SELECT with error
|
# Case 2 REPLACE INTO ... SELECT with error
|
||||||
@@ -240,3 +242,5 @@ pk
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP VIEW view_t1;
|
DROP VIEW view_t1;
|
||||||
SET GLOBAL wsrep_mode=DEFAULT;
|
SET GLOBAL wsrep_mode=DEFAULT;
|
||||||
|
connection node_2;
|
||||||
|
SET GLOBAL wsrep_mode=DEFAULT;
|
||||||
|
@@ -22,7 +22,7 @@ insert into t3 select null, 'c';
|
|||||||
insert into t3 select null, 'd' from t3;
|
insert into t3 select null, 'd' from t3;
|
||||||
select * from t3;
|
select * from t3;
|
||||||
|
|
||||||
set global wsrep_mode=REPLICATE_MYISAM;
|
set global wsrep_mode='REPLICATE_MYISAM,REPLICATE_ARIA';
|
||||||
|
|
||||||
create table t4(id serial, val varchar(100)) engine=myisam;
|
create table t4(id serial, val varchar(100)) engine=myisam;
|
||||||
insert into t4 values(null, 'a');
|
insert into t4 values(null, 'a');
|
||||||
@@ -45,9 +45,8 @@ select * from t2;
|
|||||||
select * from t3;
|
select * from t3;
|
||||||
select * from t4;
|
select * from t4;
|
||||||
select * from t5;
|
select * from t5;
|
||||||
|
set global wsrep_mode=default;
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
drop table t1,t2,t3,t4,t5;
|
drop table t1,t2,t3,t4,t5;
|
||||||
set global wsrep_mode=default;
|
set global wsrep_mode=default;
|
||||||
|
|
||||||
|
@@ -16,6 +16,7 @@ SELECT * FROM t1;
|
|||||||
SELECT * FROM s;
|
SELECT * FROM s;
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
|
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 's'
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 's'
|
||||||
@@ -27,6 +28,7 @@ SELECT * FROM t1;
|
|||||||
SELECT * FROM s;
|
SELECT * FROM s;
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
|
SET GLOBAL WSREP_MODE='REPLICATE_ARIA,REPLICATE_MYISAM';
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP SEQUENCE s;
|
DROP SEQUENCE s;
|
||||||
|
|
||||||
@@ -183,3 +185,6 @@ SELECT * FROM t1;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP VIEW view_t1;
|
DROP VIEW view_t1;
|
||||||
SET GLOBAL wsrep_mode=DEFAULT;
|
SET GLOBAL wsrep_mode=DEFAULT;
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
SET GLOBAL wsrep_mode=DEFAULT;
|
||||||
|
@@ -4728,8 +4728,11 @@ mysql_execute_command(THD *thd, bool is_called_from_prepared_stmt)
|
|||||||
if (!wsrep_toi)
|
if (!wsrep_toi)
|
||||||
{
|
{
|
||||||
/* Currently we support TOI for MyISAM only. */
|
/* Currently we support TOI for MyISAM only. */
|
||||||
if (db_type == DB_TYPE_MYISAM && wsrep_replicate_myisam)
|
if ((db_type == DB_TYPE_MYISAM && wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM)) ||
|
||||||
|
(db_type == DB_TYPE_ARIA && wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA)))
|
||||||
|
{
|
||||||
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
WSREP_TO_ISOLATION_BEGIN(first_table->db.str, first_table->table_name.str, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user