mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
MDEV-25978 : rsync SST does not work with custom binlog name
wsrep_sst_common did not correctly set name for binlog index file if custom binlog name was used and this name was not added to script command line. Added test case for both log_basename and log_binlog.
This commit is contained in:
committed by
Julius Goryavsky
parent
1deb630484
commit
05a4996c5c
96
mysql-test/suite/galera/r/galera_sst_rsync_binlogname.result
Normal file
96
mysql-test/suite/galera/r/galera_sst_rsync_binlogname.result
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
connection node_1;
|
||||||
|
connection node_2;
|
||||||
|
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||||
|
connection node_1;
|
||||||
|
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
COMMIT;
|
||||||
|
connection node_2;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
COMMIT;
|
||||||
|
Shutting down server ...
|
||||||
|
connection node_1;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
COMMIT;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
connection node_2;
|
||||||
|
Starting server ...
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
connection node_1;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
connection node_1a_galera_st_shutdown_slave;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT COUNT(*) = 35 FROM t1;
|
||||||
|
COUNT(*) = 35
|
||||||
|
1
|
||||||
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
|
COUNT(*) = 0
|
||||||
|
1
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=ON;
|
||||||
|
connection node_1;
|
||||||
|
SELECT COUNT(*) = 35 FROM t1;
|
||||||
|
COUNT(*) = 35
|
||||||
|
1
|
||||||
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
|
COUNT(*) = 0
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=ON;
|
@@ -0,0 +1,96 @@
|
|||||||
|
connection node_1;
|
||||||
|
connection node_2;
|
||||||
|
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||||
|
connection node_1;
|
||||||
|
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||||
|
COMMIT;
|
||||||
|
connection node_2;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||||
|
COMMIT;
|
||||||
|
Shutting down server ...
|
||||||
|
connection node_1;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||||
|
COMMIT;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
connection node_2;
|
||||||
|
Starting server ...
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
connection node_1;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=OFF;
|
||||||
|
START TRANSACTION;
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||||
|
COMMIT;
|
||||||
|
connection node_1a_galera_st_shutdown_slave;
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||||
|
ROLLBACK;
|
||||||
|
SELECT COUNT(*) = 35 FROM t1;
|
||||||
|
COUNT(*) = 35
|
||||||
|
1
|
||||||
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
|
COUNT(*) = 0
|
||||||
|
1
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=ON;
|
||||||
|
connection node_1;
|
||||||
|
SELECT COUNT(*) = 35 FROM t1;
|
||||||
|
COUNT(*) = 35
|
||||||
|
1
|
||||||
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
|
COUNT(*) = 0
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
COMMIT;
|
||||||
|
SET AUTOCOMMIT=ON;
|
12
mysql-test/suite/galera/t/galera_sst_rsync_binlogname.cnf
Normal file
12
mysql-test/suite/galera/t/galera_sst_rsync_binlogname.cnf
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
!include ../galera_2nodes.cnf
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
wsrep_sst_method=rsync
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||||
|
log_bin=server1_binlog
|
||||||
|
|
||||||
|
[mysqld.2]
|
||||||
|
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||||
|
log_bin=server2_binlog
|
@@ -0,0 +1,9 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
|
--let $node_1=node_1
|
||||||
|
--let $node_2=node_2
|
||||||
|
--source include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
|
--source suite/galera/include/galera_st_shutdown_slave.inc
|
||||||
|
|
||||||
|
--source include/auto_increment_offset_restore.inc
|
15
mysql-test/suite/galera/t/galera_sst_rsync_logbasename.cnf
Normal file
15
mysql-test/suite/galera/t/galera_sst_rsync_logbasename.cnf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
!include ../galera_2nodes.cnf
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
wsrep_sst_method=rsync
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||||
|
log_basename=server1
|
||||||
|
log_bin
|
||||||
|
|
||||||
|
[mysqld.2]
|
||||||
|
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||||
|
log_basename=server2
|
||||||
|
log_bin
|
||||||
|
|
@@ -0,0 +1,9 @@
|
|||||||
|
--source include/galera_cluster.inc
|
||||||
|
|
||||||
|
--let $node_1=node_1
|
||||||
|
--let $node_2=node_2
|
||||||
|
--source include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
|
--source suite/galera/include/galera_st_shutdown_slave.inc
|
||||||
|
|
||||||
|
--source include/auto_increment_offset_restore.inc
|
@@ -465,8 +465,9 @@ if [ -z "$WSREP_SST_OPT_BINLOG" -a -n "${MYSQLD_OPT_LOG_BIN+x}" ]; then
|
|||||||
# the "-bin" suffix:
|
# the "-bin" suffix:
|
||||||
readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin"
|
readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin"
|
||||||
else
|
else
|
||||||
# Take the default name:
|
# the default name, note that base of this name
|
||||||
readonly WSREP_SST_OPT_BINLOG='mysql-bin'
|
# is already defined above
|
||||||
|
readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG.index"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -549,9 +550,9 @@ get_binlog()
|
|||||||
# the "-bin" suffix:
|
# the "-bin" suffix:
|
||||||
readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_LOG_BASENAME-bin.index"
|
readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_LOG_BASENAME-bin.index"
|
||||||
else
|
else
|
||||||
# If the base name not specified, then we take
|
# the default name, note that base of this name
|
||||||
# the default name:
|
# is already defined above
|
||||||
readonly WSREP_SST_OPT_BINLOG_INDEX='mysql-bin.index'
|
readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG.index"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@@ -984,6 +984,8 @@ static ssize_t sst_prepare_other (const char* method,
|
|||||||
{
|
{
|
||||||
WSREP_ERROR("sst_prepare_other(): generate_binlog_index_opt_val() failed %d",
|
WSREP_ERROR("sst_prepare_other(): generate_binlog_index_opt_val() failed %d",
|
||||||
ret);
|
ret);
|
||||||
|
if (binlog_opt_val) my_free(binlog_opt_val);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
make_wsrep_defaults_file();
|
make_wsrep_defaults_file();
|
||||||
@@ -1001,6 +1003,7 @@ static ssize_t sst_prepare_other (const char* method,
|
|||||||
wsrep_defaults_file,
|
wsrep_defaults_file,
|
||||||
(int)getpid(),
|
(int)getpid(),
|
||||||
binlog_opt_val, binlog_index_opt_val);
|
binlog_opt_val, binlog_index_opt_val);
|
||||||
|
|
||||||
my_free(binlog_opt_val);
|
my_free(binlog_opt_val);
|
||||||
my_free(binlog_index_opt_val);
|
my_free(binlog_index_opt_val);
|
||||||
|
|
||||||
@@ -1658,6 +1661,7 @@ static int sst_donate_other (const char* method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
char* binlog_opt_val= NULL;
|
char* binlog_opt_val= NULL;
|
||||||
|
char* binlog_index_opt_val= NULL;
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
if ((ret= generate_binlog_opt_val(&binlog_opt_val)))
|
if ((ret= generate_binlog_opt_val(&binlog_opt_val)))
|
||||||
@@ -1666,6 +1670,14 @@ static int sst_donate_other (const char* method,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((ret= generate_binlog_index_opt_val(&binlog_index_opt_val)))
|
||||||
|
{
|
||||||
|
WSREP_ERROR("sst_prepare_other(): generate_binlog_index_opt_val() failed %d",
|
||||||
|
ret);
|
||||||
|
if (binlog_opt_val) my_free(binlog_opt_val);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
make_wsrep_defaults_file();
|
make_wsrep_defaults_file();
|
||||||
|
|
||||||
ret= snprintf (cmd_str(), cmd_len,
|
ret= snprintf (cmd_str(), cmd_len,
|
||||||
@@ -1679,14 +1691,17 @@ static int sst_donate_other (const char* method,
|
|||||||
WSREP_SST_OPT_GTID " '%s:%lld' "
|
WSREP_SST_OPT_GTID " '%s:%lld' "
|
||||||
WSREP_SST_OPT_GTID_DOMAIN_ID " '%d'"
|
WSREP_SST_OPT_GTID_DOMAIN_ID " '%d'"
|
||||||
"%s"
|
"%s"
|
||||||
|
"%s"
|
||||||
"%s",
|
"%s",
|
||||||
method, addr, mysqld_port, mysqld_unix_port,
|
method, addr, mysqld_port, mysqld_unix_port,
|
||||||
mysql_real_data_home,
|
mysql_real_data_home,
|
||||||
wsrep_defaults_file,
|
wsrep_defaults_file,
|
||||||
uuid, (long long) seqno, wsrep_gtid_domain_id,
|
uuid, (long long) seqno, wsrep_gtid_domain_id,
|
||||||
binlog_opt_val,
|
binlog_opt_val, binlog_index_opt_val,
|
||||||
bypass ? " " WSREP_SST_OPT_BYPASS : "");
|
bypass ? " " WSREP_SST_OPT_BYPASS : "");
|
||||||
|
|
||||||
my_free(binlog_opt_val);
|
my_free(binlog_opt_val);
|
||||||
|
my_free(binlog_index_opt_val);
|
||||||
|
|
||||||
if (ret < 0 || size_t(ret) >= cmd_len)
|
if (ret < 0 || size_t(ret) >= cmd_len)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user