mirror of
https://github.com/MariaDB/server.git
synced 2025-12-28 07:05:43 +01:00
Problem was that user could drop streaming replication table when streaming replication was used. Fixed by not allowing user to drop streaming replication table when galera is enabled. When it is not enabled super can drop it (as any table in mysql database). Added checks for wsrep_trx_fragment_unit and wsrep_trx_fragment_size variables so that streaming replication can't be enabled when streaming replication table does not exists. Fixed also bug when user is trying to disable streaming replication by wsrep_trx_fragment_size=0 when it was not enabled.
83 lines
2.4 KiB
Text
83 lines
2.4 KiB
Text
--source include/galera_cluster.inc
|
|
|
|
--connection node_1
|
|
CREATE TABLE t1 (c INT);
|
|
INSERT INTO t1 VALUES (0),(0);
|
|
CREATE TABLE t2 (c INT);
|
|
SET SESSION wsrep_trx_fragment_unit='STATEMENTS';
|
|
SET SESSION wsrep_trx_fragment_size=2;
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
DROP TABLE mysql.wsrep_streaming_log;
|
|
CREATE TRIGGER tgr AFTER INSERT ON t2 FOR EACH ROW UPDATE t1 SET c=c+1;
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
SET wsrep_trx_fragment_unit=DEFAULT;
|
|
SET GLOBAL wsrep_trx_fragment_size=DEFAULT;
|
|
DROP TRIGGER tgr;
|
|
DROP TABLE t1, t2;
|
|
|
|
--connection node_2
|
|
SET GLOBAL wsrep_on=OFF;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_unit='STATEMENTS';
|
|
SELECT @@wsrep_trx_fragment_unit;
|
|
SELECT @@wsrep_trx_fragment_size;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_size = 2;
|
|
SHOW WARNINGS;
|
|
SELECT @@wsrep_trx_fragment_unit;
|
|
SELECT @@wsrep_trx_fragment_size;
|
|
DROP TABLE mysql.wsrep_streaming_log;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_unit='STATEMENTS';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_size = 2;
|
|
SHOW WARNINGS;
|
|
SELECT @@wsrep_trx_fragment_unit;
|
|
SELECT @@wsrep_trx_fragment_size;
|
|
SET SESSION wsrep_trx_fragment_size = 0;
|
|
SELECT @@wsrep_trx_fragment_unit;
|
|
SELECT @@wsrep_trx_fragment_size;
|
|
SET GLOBAL wsrep_on=ON;
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_unit='STATEMENTS';
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
SET SESSION wsrep_trx_fragment_size = 2;
|
|
SHOW WARNINGS;
|
|
SELECT @@wsrep_trx_fragment_unit;
|
|
SELECT @@wsrep_trx_fragment_size;
|
|
SET GLOBAL wsrep_on=OFF;
|
|
CREATE TABLE IF NOT EXISTS mysql.wsrep_streaming_log
|
|
(
|
|
node_uuid CHAR(36),
|
|
trx_id BIGINT,
|
|
seqno BIGINT,
|
|
flags INT NOT NULL,
|
|
frag LONGBLOB NOT NULL,
|
|
PRIMARY KEY (node_uuid, trx_id, seqno)
|
|
) ENGINE=InnoDB STATS_PERSISTENT=0 CHARSET=latin1;
|
|
SET GLOBAL wsrep_on=ON;
|
|
|
|
--connection node_1
|
|
CREATE TABLE t1 (c INT);
|
|
INSERT INTO t1 VALUES (0),(0);
|
|
CREATE TABLE t2 (c INT);
|
|
SET SESSION wsrep_trx_fragment_unit='STATEMENTS';
|
|
SET SESSION wsrep_trx_fragment_size=2;
|
|
CREATE TRIGGER tgr AFTER INSERT ON t2 FOR EACH ROW UPDATE t1 SET c=c+1;
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
--connection node_2
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
|
|
--connection node_1
|
|
SET wsrep_trx_fragment_unit=DEFAULT;
|
|
SET GLOBAL wsrep_trx_fragment_size=DEFAULT;
|
|
DROP TRIGGER tgr;
|
|
DROP TABLE t1, t2;
|