mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 17:33:44 +01:00
Merge 10.2 into 10.3
This commit is contained in:
commit
2cf489d430
16 changed files with 339 additions and 110 deletions
extra/mariabackup
mysql-test/suite
encryption
r
t
galera_3nodes
mariabackup
storage/innobase
|
@ -2770,6 +2770,7 @@ static bool xtrabackup_copy_logfile(bool last = false)
|
|||
ut_a(dst_log_file != NULL);
|
||||
ut_ad(recv_sys != NULL);
|
||||
|
||||
bool overwritten_block = false;
|
||||
lsn_t start_lsn;
|
||||
lsn_t end_lsn;
|
||||
|
||||
|
@ -2795,6 +2796,12 @@ static bool xtrabackup_copy_logfile(bool last = false)
|
|||
}
|
||||
|
||||
if (lsn == start_lsn) {
|
||||
overwritten_block= !recv_sys->found_corrupt_log
|
||||
&& (innodb_log_checksums || log_sys.log.is_encrypted())
|
||||
&& log_block_calc_checksum_crc32(log_sys.buf) ==
|
||||
log_block_get_checksum(log_sys.buf)
|
||||
&& log_block_get_hdr_no(log_sys.buf) >
|
||||
log_block_convert_lsn_to_no(start_lsn);
|
||||
start_lsn = 0;
|
||||
} else {
|
||||
mutex_enter(&recv_sys->mutex);
|
||||
|
@ -2805,9 +2812,15 @@ static bool xtrabackup_copy_logfile(bool last = false)
|
|||
log_mutex_exit();
|
||||
|
||||
if (!start_lsn) {
|
||||
die(recv_sys->found_corrupt_log
|
||||
? "xtrabackup_copy_logfile() failed: corrupt log."
|
||||
: "xtrabackup_copy_logfile() failed.");
|
||||
const char *reason = recv_sys->found_corrupt_log
|
||||
? "corrupt log."
|
||||
: (overwritten_block
|
||||
? "redo log block is overwritten, please increase redo log size with innodb_log_file_size parameter."
|
||||
: ((innodb_log_checksums || log_sys.log.is_encrypted())
|
||||
? "redo log block checksum does not match."
|
||||
: "unknown reason as innodb_log_checksums is switched off and redo"
|
||||
" log is not encrypted."));
|
||||
die("xtrabackup_copy_logfile() failed: %s", reason);
|
||||
return true;
|
||||
}
|
||||
} while (start_lsn == end_lsn);
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
SET @save_threads = @@GLOBAL.innodb_encryption_threads;
|
||||
SET @save_tables = @@GLOBAL.innodb_encrypt_tables;
|
||||
SET default_storage_engine = InnoDB;
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256));
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
drop table t1,t2;
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb;
|
||||
INSERT /*! IGNORE */ INTO table10_int_autoinc VALUES (NULL, NULL, -474021888) , (1, NULL, NULL) , (1141047296, NULL, NULL) , (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, NULL, 9) , (0, NULL, 1225785344) , (NULL, NULL, 1574174720) , (2, NULL, NULL) , (6, NULL, 3);
|
||||
|
@ -14,13 +12,10 @@ INSERT IGNORE INTO `table1_int_autoinc` ( `col_int` ) VALUES ( 1 ), ( 0 ), ( 7 )
|
|||
INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3 ), ( 6 );
|
||||
connect con1,localhost,root,,test;
|
||||
connect con2,localhost,root,,test;
|
||||
connection default;
|
||||
drop table if exists create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
# Wait max 10 min for key encryption threads to decrypt all spaces
|
||||
# Success!
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
connection default;
|
||||
drop table create_or_replace_t, table1_int_autoinc, table0_int_autoinc,
|
||||
table10_int_autoinc;
|
||||
SET GLOBAL innodb_encryption_threads = @save_threads;
|
||||
SET GLOBAL innodb_encrypt_tables = @save_tables;
|
||||
|
|
19
mysql-test/suite/encryption/r/create_or_replace_big.result
Normal file
19
mysql-test/suite/encryption/r/create_or_replace_big.result
Normal file
|
@ -0,0 +1,19 @@
|
|||
SET default_storage_engine = InnoDB;
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256));
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
drop table t1,t2;
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb;
|
||||
INSERT /*! IGNORE */ INTO table10_int_autoinc VALUES (NULL, NULL, -474021888) , (1, NULL, NULL) , (1141047296, NULL, NULL) , (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, NULL, 9) , (0, NULL, 1225785344) , (NULL, NULL, 1574174720) , (2, NULL, NULL) , (6, NULL, 3);
|
||||
CREATE TABLE `table1_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int,key (`col_int_key` ), primary key (pk)) engine=innodb;
|
||||
CREATE TABLE `table0_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb;
|
||||
INSERT /*! IGNORE */ INTO table1_int_autoinc VALUES (4, NULL, NULL);
|
||||
INSERT IGNORE INTO `table0_int_autoinc` ( `col_int_key` ) VALUES ( 1 ), ( 3 ), ( 4 ), ( 1 );
|
||||
INSERT IGNORE INTO `table1_int_autoinc` ( `col_int` ) VALUES ( 1 ), ( 0 ), ( 7 ), ( 9 );
|
||||
INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3 ), ( 6 );
|
||||
# Wait max 10 min for key encryption threads to decrypt all spaces
|
||||
# Success!
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
DROP TABLE table0_int_autoinc, table1_int_autoinc, table10_int_autoinc;
|
|
@ -1,42 +1,12 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_file_key_management_plugin.inc
|
||||
--source include/not_embedded.inc
|
||||
# This is needed for longer testcase timeout at least P7/P8
|
||||
--source include/big_test.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
SET @save_threads = @@GLOBAL.innodb_encryption_threads;
|
||||
SET @save_tables = @@GLOBAL.innodb_encrypt_tables;
|
||||
|
||||
#
|
||||
# MDEV-8164: Server crashes in pfs_mutex_enter_func after fil_crypt_is_closing or alike
|
||||
#
|
||||
SET default_storage_engine = InnoDB;
|
||||
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256));
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
|
||||
let $i = 40;
|
||||
while ($i)
|
||||
{
|
||||
SET GLOBAL innodb_encrypt_tables = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 1;
|
||||
CREATE OR REPLACE TABLE t1 AS SELECT * FROM t2;
|
||||
CREATE OR REPLACE TABLE t2 AS SELECT * FROM t1;
|
||||
SET GLOBAL innodb_encryption_rotation_iops = 100;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
CREATE OR REPLACE TABLE t2 AS SELECT * FROM t1;
|
||||
CREATE OR REPLACE TABLE t1 AS SELECT * FROM t2;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
--enable_abort_on_error
|
||||
--enable_warnings
|
||||
--enable_query_log
|
||||
|
||||
drop table t1,t2;
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
|
||||
#
|
||||
# MDEV-8173: InnoDB; Failing assertion: crypt_data->type == 1
|
||||
#
|
||||
|
@ -58,11 +28,9 @@ INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3
|
|||
--connect (con1,localhost,root,,test)
|
||||
--connect (con2,localhost,root,,test)
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
|
||||
let $i = 500;
|
||||
let $i = 100;
|
||||
while ($i)
|
||||
{
|
||||
connection con1;
|
||||
|
@ -101,42 +69,12 @@ dec $i;
|
|||
}
|
||||
|
||||
--enable_query_log
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
drop table if exists create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc;
|
||||
--disconnect con1
|
||||
--disconnect con2
|
||||
--enable_abort_on_error
|
||||
--enable_warnings
|
||||
drop table create_or_replace_t, table1_int_autoinc, table0_int_autoinc,
|
||||
table10_int_autoinc;
|
||||
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
|
||||
--echo # Wait max 10 min for key encryption threads to decrypt all spaces
|
||||
let $cnt=600;
|
||||
while ($cnt)
|
||||
{
|
||||
let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`;
|
||||
if ($success)
|
||||
{
|
||||
let $cnt=0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 1;
|
||||
dec $cnt;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION;
|
||||
SHOW STATUS LIKE 'innodb_encryption%';
|
||||
-- die Timeout waiting for encryption threads
|
||||
}
|
||||
--echo # Success!
|
||||
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
|
||||
# Make sure that all dirty pages are flushed
|
||||
|
||||
-- source include/restart_mysqld.inc
|
||||
SET GLOBAL innodb_encryption_threads = @save_threads;
|
||||
SET GLOBAL innodb_encrypt_tables = @save_tables;
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
|
86
mysql-test/suite/encryption/t/create_or_replace_big.test
Normal file
86
mysql-test/suite/encryption/t/create_or_replace_big.test
Normal file
|
@ -0,0 +1,86 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_file_key_management_plugin.inc
|
||||
--source include/not_embedded.inc
|
||||
# This is needed for longer testcase timeout at least P7/P8
|
||||
--source include/big_test.inc
|
||||
|
||||
#
|
||||
# MDEV-8164: Server crashes in pfs_mutex_enter_func after fil_crypt_is_closing or alike
|
||||
#
|
||||
SET default_storage_engine = InnoDB;
|
||||
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, c VARCHAR(256));
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
|
||||
--disable_abort_on_error
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
|
||||
let $i = 40;
|
||||
while ($i)
|
||||
{
|
||||
SET GLOBAL innodb_encrypt_tables = ON;
|
||||
SET GLOBAL innodb_encryption_threads = 1;
|
||||
CREATE OR REPLACE TABLE t1 AS SELECT * FROM t2;
|
||||
CREATE OR REPLACE TABLE t2 AS SELECT * FROM t1;
|
||||
SET GLOBAL innodb_encryption_rotation_iops = 100;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
CREATE OR REPLACE TABLE t2 AS SELECT * FROM t1;
|
||||
CREATE OR REPLACE TABLE t1 AS SELECT * FROM t2;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
--enable_abort_on_error
|
||||
--enable_warnings
|
||||
--enable_query_log
|
||||
|
||||
drop table t1,t2;
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
|
||||
#
|
||||
# MDEV-8173: InnoDB; Failing assertion: crypt_data->type == 1
|
||||
#
|
||||
|
||||
SET GLOBAL innodb_encryption_threads = 4;
|
||||
|
||||
CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb;
|
||||
INSERT /*! IGNORE */ INTO table10_int_autoinc VALUES (NULL, NULL, -474021888) , (1, NULL, NULL) , (1141047296, NULL, NULL) , (NULL, NULL, NULL) , (NULL, NULL, 1) , (NULL, NULL, 9) , (0, NULL, 1225785344) , (NULL, NULL, 1574174720) , (2, NULL, NULL) , (6, NULL, 3);
|
||||
|
||||
CREATE TABLE `table1_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int,key (`col_int_key` ), primary key (pk)) engine=innodb;
|
||||
|
||||
CREATE TABLE `table0_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb;
|
||||
|
||||
INSERT /*! IGNORE */ INTO table1_int_autoinc VALUES (4, NULL, NULL);
|
||||
INSERT IGNORE INTO `table0_int_autoinc` ( `col_int_key` ) VALUES ( 1 ), ( 3 ), ( 4 ), ( 1 );
|
||||
INSERT IGNORE INTO `table1_int_autoinc` ( `col_int` ) VALUES ( 1 ), ( 0 ), ( 7 ), ( 9 );
|
||||
INSERT IGNORE INTO `table10_int_autoinc` ( `col_int` ) VALUES ( 6 ), ( 2 ), ( 3 ), ( 6 );
|
||||
|
||||
--echo # Wait max 10 min for key encryption threads to decrypt all spaces
|
||||
let $cnt=600;
|
||||
while ($cnt)
|
||||
{
|
||||
let $success=`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`;
|
||||
if ($success)
|
||||
{
|
||||
let $cnt=0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 1;
|
||||
dec $cnt;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION;
|
||||
SHOW STATUS LIKE 'innodb_encryption%';
|
||||
-- die Timeout waiting for encryption threads
|
||||
}
|
||||
--echo # Success!
|
||||
|
||||
SET GLOBAL innodb_encryption_threads = 0;
|
||||
SET GLOBAL innodb_encrypt_tables = OFF;
|
||||
|
||||
DROP TABLE table0_int_autoinc, table1_int_autoinc, table10_int_autoinc;
|
||||
|
||||
-- source include/restart_mysqld.inc
|
|
@ -10,6 +10,7 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
galera_gtid_2_cluster : MDEV-23775 Galera test failure on galera_3nodes.galera_gtid_2_cluster
|
||||
galera_ist_gcache_rollover : MDEV-23578 WSREP: exception caused by message: {v=0,t=1,ut=255,o=4,s=0,sr=0,as=1,f=6,src=50524cfe,srcvid=view_id(REG,50524cfe,4),insvid=view_id(UNKNOWN,00000000,0),ru=00000000,r=[-1,-1],fs=75,nl=(}
|
||||
galera_slave_options_do :MDEV-8798
|
||||
galera_slave_options_ignore : MDEV-8798
|
||||
|
|
|
@ -28,6 +28,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.1.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
[mysqld.2]
|
||||
#galera_port=@OPT.port
|
||||
|
@ -39,6 +40,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
[mysqld.3]
|
||||
#galera_port=@OPT.port
|
||||
|
@ -50,6 +52,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.3.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.3.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
|
||||
[mysqld.4]
|
||||
|
@ -64,6 +67,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.4.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.4.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.4.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.4.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
[mysqld.5]
|
||||
wsrep_cluster_name=cluster2
|
||||
|
@ -76,6 +80,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.5.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.5.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.5.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.5.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
[mysqld.6]
|
||||
wsrep_cluster_name=cluster2
|
||||
|
@ -88,6 +93,7 @@ wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.6.#gale
|
|||
wsrep_sst_receive_address=127.0.0.2:@mysqld.6.#sst_port
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.6.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.6.#sst_port'
|
||||
wsrep-on=1
|
||||
|
||||
[ENV]
|
||||
NODE_MYPORT_1= @mysqld.1.port
|
||||
|
|
|
@ -1,27 +1,38 @@
|
|||
connection node_1;
|
||||
cluster 1 node 1
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connection node_2;
|
||||
cluster 1 node 2
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
|
||||
connection node_3;
|
||||
cluster 1 node 3
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4;
|
||||
connection node_4;
|
||||
cluster 2 node 1
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connect node_5, 127.0.0.1, root, , test, $NODE_MYPORT_5;
|
||||
connection node_5;
|
||||
cluster 2 node 2
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connect node_6, 127.0.0.1, root, , test, $NODE_MYPORT_6;
|
||||
connection node_6;
|
||||
cluster 2 node 3
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 3
|
||||
connection node_1;
|
||||
change master to master_host='127.0.0.1', master_user='root', master_port=NODE_MYPORT_4, master_use_gtid=current_pos, ignore_server_ids=(12,13);;
|
||||
start slave;
|
||||
include/wait_for_slave_to_start.inc
|
||||
|
@ -31,6 +42,7 @@ select @@gtid_binlog_state;
|
|||
select @@gtid_slave_pos;
|
||||
@@gtid_slave_pos
|
||||
|
||||
connection node_4;
|
||||
change master to master_host='127.0.0.1', master_user='root', master_port=NODE_MYPORT_1, master_use_gtid=current_pos, ignore_server_ids=(22,23);;
|
||||
start slave;
|
||||
include/wait_for_slave_to_start.inc
|
||||
|
@ -41,15 +53,19 @@ select @@gtid_slave_pos;
|
|||
@@gtid_slave_pos
|
||||
|
||||
cluster 1 node 1
|
||||
connection node_1;
|
||||
create table t1 (cluster_domain_id int ,node_server_id int, seq_no int);
|
||||
insert into t1 values (1, 11, 2);
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 1
|
||||
connection node_4;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2
|
||||
|
@ -62,31 +78,40 @@ cluster_domain_id node_server_id seq_no
|
|||
1 11 2
|
||||
2 21 1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 2
|
||||
connection node_2;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2,2-21-1
|
||||
1-11-2
|
||||
insert into t1 values (1, 12, 3);
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2,1-12-3,2-21-1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 3
|
||||
connection node_3;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2,1-12-3,2-21-1
|
||||
1-11-2,2-21-1
|
||||
insert into t1 values (1, 13, 4);
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 2
|
||||
connection node_5;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1
|
||||
|
@ -95,9 +120,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2
|
||||
#wait for sync cluster 2 and 1
|
||||
connection node_4;
|
||||
include/save_master_gtid.inc
|
||||
connection node_1;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 3
|
||||
connection node_6;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2
|
||||
|
@ -106,9 +134,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2,2-23-3
|
||||
#wait for sync cluster 2 and 1
|
||||
connection node_4;
|
||||
include/save_master_gtid.inc
|
||||
connection node_1;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 1
|
||||
connection node_1;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2,2-23-3
|
||||
|
@ -119,15 +150,21 @@ change master to master_use_gtid=no, ignore_server_ids=();
|
|||
reset master;
|
||||
set global GTID_SLAVE_POS="";
|
||||
cluster 2 node 1
|
||||
connection node_4;
|
||||
stop slave;
|
||||
reset slave;
|
||||
change master to master_use_gtid=no, ignore_server_ids=();
|
||||
reset master;
|
||||
set global GTID_SLAVE_POS="";
|
||||
connection node_2;
|
||||
reset master;
|
||||
connection node_3;
|
||||
reset master;
|
||||
connection node_5;
|
||||
reset master;
|
||||
connection node_6;
|
||||
reset master;
|
||||
connection node_1;
|
||||
change master to master_host='127.0.0.1', master_user='root', master_port=NODE_MYPORT_6, master_use_gtid=current_pos, ignore_server_ids=(12,13);;
|
||||
start slave;
|
||||
include/wait_for_slave_to_start.inc
|
||||
|
@ -137,6 +174,7 @@ select @@gtid_binlog_state;
|
|||
select @@gtid_slave_pos;
|
||||
@@gtid_slave_pos
|
||||
|
||||
connection node_4;
|
||||
change master to master_host='127.0.0.1', master_user='root', master_port=NODE_MYPORT_3, master_use_gtid=current_pos, ignore_server_ids=(22,23);;
|
||||
start slave;
|
||||
include/wait_for_slave_to_start.inc
|
||||
|
@ -147,15 +185,19 @@ select @@gtid_slave_pos;
|
|||
@@gtid_slave_pos
|
||||
|
||||
cluster 1 node 1
|
||||
create table t1 (cluster_domain_id int ,node_server_id int, seq_no int);
|
||||
connection node_1;
|
||||
create table t1 (cluster_domain_id int not null,node_server_id int not null, seq_no int not null, primary key(cluster_domain_id, node_server_id,seq_no)) engine=innodb;
|
||||
insert into t1 values (1, 11, 2);
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 1
|
||||
connection node_4;
|
||||
insert into t1 values (2, 21, 1);
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
|
@ -165,9 +207,12 @@ cluster_domain_id node_server_id seq_no
|
|||
1 11 2
|
||||
2 21 1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 2
|
||||
connection node_2;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2,2-21-1
|
||||
|
@ -176,9 +221,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-11-2,1-12-3,2-21-1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 3
|
||||
connection node_3;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-11-2,1-12-3,2-21-1
|
||||
|
@ -187,9 +235,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1
|
||||
#wait for sync cluster 1 and 2
|
||||
connection node_1;
|
||||
include/save_master_gtid.inc
|
||||
connection node_4;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 2
|
||||
connection node_5;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1
|
||||
|
@ -198,9 +249,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2
|
||||
#wait for sync cluster 2 and 1
|
||||
connection node_4;
|
||||
include/save_master_gtid.inc
|
||||
connection node_1;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 2 node 3
|
||||
connection node_6;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2
|
||||
|
@ -209,9 +263,12 @@ select @@gtid_binlog_state;
|
|||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2,2-23-3
|
||||
#wait for sync cluster 2 and 1
|
||||
connection node_4;
|
||||
include/save_master_gtid.inc
|
||||
connection node_1;
|
||||
include/sync_with_master_gtid.inc
|
||||
cluster 1 node 1
|
||||
connection node_1;
|
||||
select @@gtid_binlog_state;
|
||||
@@gtid_binlog_state
|
||||
1-12-3,1-11-2,1-13-4,2-21-1,2-22-2,2-23-3
|
||||
|
@ -221,11 +278,24 @@ change master to master_use_gtid=no, ignore_server_ids=();
|
|||
reset master;
|
||||
set global GTID_SLAVE_POS="";
|
||||
cluster 2 node 1
|
||||
connection node_4;
|
||||
stop slave;
|
||||
change master to master_use_gtid=no, ignore_server_ids=();
|
||||
reset master;
|
||||
set global GTID_SLAVE_POS="";
|
||||
connection node_2;
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
connection node_3;
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
connection node_5;
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
connection node_6;
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/force_restart.inc
|
||||
|
||||
--connection node_1
|
||||
--echo cluster 1 node 1
|
||||
|
@ -29,6 +29,7 @@ SHOW STATUS LIKE 'wsrep_cluster_size';
|
|||
--connection node_4
|
||||
--echo cluster 2 node 1
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log.*");
|
||||
|
||||
--connect node_5, 127.0.0.1, root, , test, $NODE_MYPORT_5
|
||||
--connection node_5
|
||||
|
@ -193,7 +194,7 @@ select @@gtid_slave_pos;
|
|||
|
||||
--echo cluster 1 node 1
|
||||
--connection node_1
|
||||
create table t1 (cluster_domain_id int ,node_server_id int, seq_no int);
|
||||
create table t1 (cluster_domain_id int not null,node_server_id int not null, seq_no int not null, primary key(cluster_domain_id, node_server_id,seq_no)) engine=innodb;
|
||||
insert into t1 values (1, 11, 2);
|
||||
|
||||
select @@gtid_binlog_state;
|
||||
|
@ -283,10 +284,19 @@ reset master;
|
|||
set global GTID_SLAVE_POS="";
|
||||
|
||||
--connection node_2
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
--connection node_3
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
--connection node_5
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
--connection node_6
|
||||
set session wsrep_on=off;
|
||||
reset master;
|
||||
set session wsrep_on=on;
|
||||
|
||||
|
|
1
mysql-test/suite/mariabackup/innodb_redo_overwrite.opt
Normal file
1
mysql-test/suite/mariabackup/innodb_redo_overwrite.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--loose-innodb-log-file-size=1048576 --loose-innodb-log-files-in-group=2
|
28
mysql-test/suite/mariabackup/innodb_redo_overwrite.result
Normal file
28
mysql-test/suite/mariabackup/innodb_redo_overwrite.result
Normal file
|
@ -0,0 +1,28 @@
|
|||
CREATE TABLE t(i INT) ENGINE=INNODB;
|
||||
INSERT INTO t VALUES
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
|
||||
# Generate enough data to overwrite innodb redo log
|
||||
# on the next "INSERT INTO t SELECT * FROM t" execution.
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
# xtrabackup backup
|
||||
FOUND 1 /failed: redo log block is overwritten/ in backup.log
|
||||
FOUND 1 /failed: redo log block checksum does not match/ in backup.log
|
||||
FOUND 1 /failed: unknown reason/ in backup.log
|
||||
DROP TABLE t;
|
70
mysql-test/suite/mariabackup/innodb_redo_overwrite.test
Normal file
70
mysql-test/suite/mariabackup/innodb_redo_overwrite.test
Normal file
|
@ -0,0 +1,70 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
CREATE TABLE t(i INT) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t VALUES
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9),
|
||||
(0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
|
||||
--echo # Generate enough data to overwrite innodb redo log
|
||||
--echo # on the next "INSERT INTO t SELECT * FROM t" execution.
|
||||
--let $i = 0
|
||||
while ($i < 9) {
|
||||
INSERT INTO t SELECT * FROM t;
|
||||
--inc $i
|
||||
}
|
||||
|
||||
--echo # xtrabackup backup
|
||||
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
||||
--let $backuplog=$MYSQLTEST_VARDIR/tmp/backup.log
|
||||
|
||||
--let before_innodb_log_copy_thread_started=INSERT INTO test.t SELECT * FROM test.t
|
||||
|
||||
--disable_result_log
|
||||
--error 1
|
||||
--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events > $backuplog
|
||||
--enable_result_log
|
||||
|
||||
--let SEARCH_PATTERN=failed: redo log block is overwritten
|
||||
--let SEARCH_FILE=$backuplog
|
||||
--source include/search_pattern_in_file.inc
|
||||
--remove_file $backuplog
|
||||
--rmdir $targetdir
|
||||
|
||||
--let before_innodb_log_copy_thread_started=INSERT INTO test.t VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)
|
||||
|
||||
--disable_result_log
|
||||
--error 1
|
||||
--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --dbug=+d,mariabackup_events,log_checksum_mismatch > $backuplog
|
||||
--enable_result_log
|
||||
|
||||
--let SEARCH_PATTERN=failed: redo log block checksum does not match
|
||||
--let SEARCH_FILE=$backuplog
|
||||
--source include/search_pattern_in_file.inc
|
||||
--remove_file $backuplog
|
||||
--rmdir $targetdir
|
||||
|
||||
--let before_innodb_log_copy_thread_started=INSERT INTO test.t SELECT * FROM test.t LIMIT 50000
|
||||
|
||||
--disable_result_log
|
||||
--error 1
|
||||
--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --innodb-log-checksums=0 --dbug=+d,mariabackup_events > $backuplog
|
||||
--enable_result_log
|
||||
|
||||
--let SEARCH_PATTERN=failed: unknown reason
|
||||
--let SEARCH_FILE=$backuplog
|
||||
--source include/search_pattern_in_file.inc
|
||||
--remove_file $backuplog
|
||||
--rmdir $targetdir
|
||||
|
||||
--let before_innodb_log_copy_thread_started=
|
||||
|
||||
DROP TABLE t;
|
|
@ -1485,6 +1485,11 @@ static bool fil_crypt_find_space_to_rotate(
|
|||
{
|
||||
/* we need iops to start rotating */
|
||||
while (!state->should_shutdown() && !fil_crypt_alloc_iops(state)) {
|
||||
if (state->space && state->space->is_stopping()) {
|
||||
state->space->release();
|
||||
state->space = NULL;
|
||||
}
|
||||
|
||||
os_event_reset(fil_crypt_threads_event);
|
||||
os_event_wait_time(fil_crypt_threads_event, 100000);
|
||||
}
|
||||
|
@ -2500,6 +2505,7 @@ fil_space_crypt_close_tablespace(
|
|||
|
||||
/* wakeup throttle (all) sleepers */
|
||||
os_event_set(fil_crypt_throttle_sleep_event);
|
||||
os_event_set(fil_crypt_threads_event);
|
||||
|
||||
os_thread_sleep(20000);
|
||||
dict_mutex_enter_for_mysql();
|
||||
|
|
|
@ -5722,22 +5722,6 @@ fts_savepoint_rollback(
|
|||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Compare two fts_aux_table_t parent_ids.
|
||||
@return < 0 if n1 < n2, 0 if n1 == n2, > 0 if n1 > n2 */
|
||||
UNIV_INLINE
|
||||
int
|
||||
fts_check_aux_table_parent_id_cmp(
|
||||
/*==============================*/
|
||||
const void* p1, /*!< in: id1 */
|
||||
const void* p2) /*!< in: id2 */
|
||||
{
|
||||
const fts_aux_table_t* fa1 = static_cast<const fts_aux_table_t*>(p1);
|
||||
const fts_aux_table_t* fa2 = static_cast<const fts_aux_table_t*>(p2);
|
||||
|
||||
return static_cast<int>(fa1->parent_id - fa2->parent_id);
|
||||
}
|
||||
|
||||
bool fts_check_aux_table(const char *name,
|
||||
table_id_t *table_id,
|
||||
index_id_t *index_id)
|
||||
|
|
|
@ -958,6 +958,8 @@ fail:
|
|||
}
|
||||
});
|
||||
|
||||
DBUG_EXECUTE_IF("log_checksum_mismatch", { cksum = crc + 1; });
|
||||
|
||||
if (crc != cksum) {
|
||||
ib::error() << "Invalid log block checksum."
|
||||
<< " block: " << block_number
|
||||
|
|
Loading…
Add table
Reference in a new issue