1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-30 05:23:50 +03:00
Files
mariadb/storage/tokudb/mysql-test/tokudb_rpl/t/mdev12179.test
Kristian Nielsen c174718aed MDEV-12179: Per-engine mysql.gtid_slave_pos table
Intermediate commit.

Implement status variables to aid the DBA in determining the need
and/or effectiveness of the per-engine mylsq.gtid_slave_pos feature:

transactions_multi_engine

  Number of transactions that changed data in multiple (transactional)
  storage engines.

rpl_transactions_multi_engine

  Number of replicated transactions that involved changes in multiple
  (transactional) storage engines, before considering the update of the
  mysql.gtid_slave_posXXX table.

transactions_gtid_foreign_engine

  Number of replicated transactions where the update of the
  mysql.gtid_slave_posXXX table had to choose a storage engine that did not
  otherwise participate in the transaction.
2017-04-25 19:08:45 +02:00

233 lines
6.2 KiB
Plaintext

--source include/have_tokudb.inc
--source include/have_innodb.inc
--source include/master-slave.inc
--connection server_2
--source include/stop_slave.inc
CHANGE MASTER TO master_use_gtid=slave_pos;
SET sql_log_bin=0;
CREATE TABLE mysql.gtid_slave_pos_innodb LIKE mysql.gtid_slave_pos;
ALTER TABLE mysql.gtid_slave_pos_innodb ENGINE=InnoDB;
CREATE TABLE mysql.gtid_slave_pos_tokudb LIKE mysql.gtid_slave_pos;
ALTER TABLE mysql.gtid_slave_pos_tokudb ENGINE=TokuDB;
CREATE TABLE mysql.gtid_slave_pos_myisam_redundant LIKE mysql.gtid_slave_pos;
CREATE TABLE mysql.gtid_slave_pos_innodb_redundant LIKE mysql.gtid_slave_pos;
ALTER TABLE mysql.gtid_slave_pos_innodb_redundant ENGINE=InnoDB;
call mtr.add_suppression("Ignoring redundant table.*since.*has the same storage engine");
--source include/start_slave.inc
--connection server_1
CREATE TABLE t1 (a INT PRIMARY KEY);
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t3 (a INT PRIMARY KEY) ENGINE=TokuDB;
INSERT INTO t1 VALUES (1);
INSERT INTO t2 VALUES (1);
INSERT INTO t3 VALUES (1);
SELECT * FROM t1 ORDER BY a;
SELECT * FROM t2 ORDER BY a;
SELECT * FROM t3 ORDER BY a;
--save_master_pos
--connection server_2
--sync_with_master
SELECT * FROM t1 ORDER BY a;
SELECT * FROM t2 ORDER BY a;
SELECT * FROM t3 ORDER BY a;
SELECT * FROM mysql.gtid_slave_pos ORDER BY sub_id;
SELECT * FROM ( SELECT * FROM mysql.gtid_slave_pos_innodb
UNION ALL SELECT * FROM mysql.gtid_slave_pos_innodb_redundant) inner_select
ORDER BY sub_id;
SELECT * FROM mysql.gtid_slave_pos_tokudb ORDER BY sub_id;
# Test status variable Transactions_multi_engine.
--connection server_2
FLUSH NO_WRITE_TO_BINLOG STATUS;
SET sql_log_bin=0;
SHOW STATUS LIKE "Transactions_multi_engine";
INSERT INTO t1 VALUES (100);
SHOW STATUS LIKE "Transactions_multi_engine";
INSERT INTO t2 VALUES (101);
SHOW STATUS LIKE "Transactions_multi_engine";
INSERT INTO t3 VALUES (101);
SHOW STATUS LIKE "Transactions_multi_engine";
BEGIN;
INSERT INTO t3 VALUES (102);
INSERT INTO t2 VALUES (103);
COMMIT;
SHOW STATUS LIKE "Transactions_multi_engine";
BEGIN;
INSERT INTO t2 VALUES (104);
INSERT INTO t3 VALUES (105);
COMMIT;
SHOW STATUS LIKE "Transactions_multi_engine";
UPDATE t2, t3 SET t2.a=106, t3.a=107 WHERE t2.a=104 AND t3.a=105;
SHOW STATUS LIKE "Transactions_multi_engine";
# Try again with binlog enabled.
SET sql_log_bin=1;
INSERT INTO t1 VALUES (200);
SHOW STATUS LIKE "Transactions_multi_engine";
INSERT INTO t2 VALUES (201);
SHOW STATUS LIKE "Transactions_multi_engine";
INSERT INTO t3 VALUES (201);
SHOW STATUS LIKE "Transactions_multi_engine";
BEGIN;
INSERT INTO t3 VALUES (202);
INSERT INTO t2 VALUES (203);
COMMIT;
SHOW STATUS LIKE "Transactions_multi_engine";
BEGIN;
INSERT INTO t2 VALUES (204);
INSERT INTO t3 VALUES (205);
COMMIT;
SHOW STATUS LIKE "Transactions_multi_engine";
UPDATE t2, t3 SET t2.a=206, t3.a=207 WHERE t2.a=204 AND t3.a=205;
SHOW STATUS LIKE "Transactions_multi_engine";
DELETE FROM t1 WHERE a >= 100;
DELETE FROM t2 WHERE a >= 100;
DELETE FROM t3 WHERE a >= 100;
# Test status variables Rpl_transactions_multi_engine and Transactions_gtid_foreign_engine.
# Have mysql.gtid_slave_pos* for myisam and innodb but not tokudb.
--connection server_2
--source include/stop_slave.inc
SET sql_log_bin=0;
DROP TABLE mysql.gtid_slave_pos_tokudb;
DROP TABLE mysql.gtid_slave_pos_myisam_redundant;
DROP TABLE mysql.gtid_slave_pos_innodb_redundant;
SET sql_log_bin=1;
FLUSH NO_WRITE_TO_BINLOG STATUS;
--source include/start_slave.inc
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t1 VALUES (100);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t2 VALUES (101);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t3 VALUES (101);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
BEGIN;
INSERT INTO t3 VALUES (102);
INSERT INTO t2 VALUES (103);
COMMIT;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
BEGIN;
INSERT INTO t2 VALUES (104);
INSERT INTO t3 VALUES (105);
COMMIT;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
UPDATE t2, t3 SET t2.a=106, t3.a=107 WHERE t2.a=104 AND t3.a=105;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
# Now the same thing, but without binlogging on the slave.
--connection server_2
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
wait
EOF
--shutdown_server 30
--source include/wait_until_disconnected.inc
# Restart without binary log.
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
restart: --skip-log-bin
EOF
--connection server_2
--enable_reconnect
--source include/wait_until_connected_again.inc
SHOW VARIABLES LIKE 'log_bin';
--source include/start_slave.inc
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t1 VALUES (200);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t2 VALUES (201);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
INSERT INTO t3 VALUES (201);
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
BEGIN;
INSERT INTO t3 VALUES (202);
INSERT INTO t2 VALUES (203);
COMMIT;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
BEGIN;
INSERT INTO t2 VALUES (204);
INSERT INTO t3 VALUES (205);
COMMIT;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_1
UPDATE t2, t3 SET t2.a=206, t3.a=207 WHERE t2.a=204 AND t3.a=205;
--save_master_pos
--connection server_2
--sync_with_master
SHOW STATUS LIKE "%transactions%engine";
--connection server_2
SET sql_log_bin=0;
DROP TABLE mysql.gtid_slave_pos_innodb;
SET sql_log_bin=1;
--connection server_1
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
--source include/rpl_end.inc