mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge 10.4 into 10.5
This commit is contained in:
@ -112,6 +112,8 @@ bool ibx_partial_backup = false;
|
|||||||
char *ibx_position_arg = NULL;
|
char *ibx_position_arg = NULL;
|
||||||
char *ibx_backup_directory = NULL;
|
char *ibx_backup_directory = NULL;
|
||||||
|
|
||||||
|
extern bool xb_opt_destroy_password;
|
||||||
|
|
||||||
/* copy of proxied xtrabackup options */
|
/* copy of proxied xtrabackup options */
|
||||||
my_bool ibx_xb_close_files;
|
my_bool ibx_xb_close_files;
|
||||||
const char *ibx_xtrabackup_compress_alg;
|
const char *ibx_xtrabackup_compress_alg;
|
||||||
@ -770,18 +772,7 @@ ibx_get_one_option(const struct my_option *opt,
|
|||||||
xtrabackup_compress = TRUE;
|
xtrabackup_compress = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (argument)
|
opt_ibx_password= argument;
|
||||||
{
|
|
||||||
char *start = argument;
|
|
||||||
my_free(opt_ibx_password);
|
|
||||||
opt_ibx_password= my_strdup(PSI_NOT_INSTRUMENTED,
|
|
||||||
argument, MYF(MY_FAE));
|
|
||||||
/* Destroy argument */
|
|
||||||
while (*argument)
|
|
||||||
*argument++= 'x';
|
|
||||||
if (*start)
|
|
||||||
start[1]=0 ;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
|
@ -118,6 +118,7 @@ my_bool xtrabackup_copy_back;
|
|||||||
my_bool xtrabackup_move_back;
|
my_bool xtrabackup_move_back;
|
||||||
my_bool xtrabackup_decrypt_decompress;
|
my_bool xtrabackup_decrypt_decompress;
|
||||||
my_bool xtrabackup_print_param;
|
my_bool xtrabackup_print_param;
|
||||||
|
my_bool xtrabackup_mysqld_args;
|
||||||
|
|
||||||
my_bool xtrabackup_export;
|
my_bool xtrabackup_export;
|
||||||
|
|
||||||
@ -797,7 +798,8 @@ enum options_xtrabackup
|
|||||||
OPT_LOCK_DDL_PER_TABLE,
|
OPT_LOCK_DDL_PER_TABLE,
|
||||||
OPT_ROCKSDB_DATADIR,
|
OPT_ROCKSDB_DATADIR,
|
||||||
OPT_BACKUP_ROCKSDB,
|
OPT_BACKUP_ROCKSDB,
|
||||||
OPT_XTRA_CHECK_PRIVILEGES
|
OPT_XTRA_CHECK_PRIVILEGES,
|
||||||
|
OPT_XTRA_MYSQLD_ARGS
|
||||||
};
|
};
|
||||||
|
|
||||||
struct my_option xb_client_options[]= {
|
struct my_option xb_client_options[]= {
|
||||||
@ -1191,7 +1193,6 @@ struct my_option xb_client_options[]= {
|
|||||||
#define MYSQL_CLIENT
|
#define MYSQL_CLIENT
|
||||||
#include "sslopt-longopts.h"
|
#include "sslopt-longopts.h"
|
||||||
#undef MYSQL_CLIENT
|
#undef MYSQL_CLIENT
|
||||||
|
|
||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}};
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}};
|
||||||
|
|
||||||
uint xb_client_options_count = array_elements(xb_client_options);
|
uint xb_client_options_count = array_elements(xb_client_options);
|
||||||
@ -1407,6 +1408,13 @@ struct my_option xb_server_options[] =
|
|||||||
&opt_check_privileges, &opt_check_privileges,
|
&opt_check_privileges, &opt_check_privileges,
|
||||||
0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 },
|
0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 },
|
||||||
|
|
||||||
|
{"mysqld-args", OPT_XTRA_MYSQLD_ARGS,
|
||||||
|
"All arguments that follow this argument are considered as server "
|
||||||
|
"options, and if some of them are not supported by mariabackup, they "
|
||||||
|
"will be ignored.",
|
||||||
|
(G_PTR *) &xtrabackup_mysqld_args, (G_PTR *) &xtrabackup_mysqld_args, 0,
|
||||||
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
|
||||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1574,24 +1582,11 @@ end:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const char *xb_client_default_groups[]= {
|
static const char *xb_client_default_groups[]= {
|
||||||
"xtrabackup", "mariabackup",
|
"client", "client-server", "client-mariadb", 0, 0, 0};
|
||||||
"client", "client-server",
|
|
||||||
"client-mariadb",
|
|
||||||
0, 0, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *xb_server_default_groups[]={
|
static const char *backup_default_groups[]= {
|
||||||
"xtrabackup", "mariabackup",
|
"xtrabackup", "mariabackup", "mariadb-backup", 0, 0, 0};
|
||||||
"mysqld", "server", MYSQL_BASE_VERSION,
|
|
||||||
"mariadb", MARIADB_BASE_VERSION,
|
|
||||||
"client-server",
|
|
||||||
#ifdef WITH_WSREP
|
|
||||||
"galera",
|
|
||||||
#endif
|
|
||||||
0, 0, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static void print_version(void)
|
static void print_version(void)
|
||||||
{
|
{
|
||||||
@ -1619,7 +1614,7 @@ GNU General Public License for more details.\n\
|
|||||||
You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt\n");
|
You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt\n");
|
||||||
|
|
||||||
printf("Usage: %s [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]\n",my_progname);
|
printf("Usage: %s [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]\n",my_progname);
|
||||||
print_defaults("my", xb_server_default_groups);
|
print_defaults("my", load_default_groups);
|
||||||
my_print_help(xb_client_options);
|
my_print_help(xb_client_options);
|
||||||
my_print_help(xb_server_options);
|
my_print_help(xb_server_options);
|
||||||
my_print_variables(xb_server_options);
|
my_print_variables(xb_server_options);
|
||||||
@ -1754,15 +1749,7 @@ xb_get_one_option(const struct my_option *opt,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (argument)
|
opt_password = argument;
|
||||||
{
|
|
||||||
char *start= argument;
|
|
||||||
my_free(opt_password);
|
|
||||||
opt_password= my_strdup(PSI_NOT_INSTRUMENTED, argument, MYF(MY_FAE));
|
|
||||||
while (*argument) *argument++= 'x'; // Destroy argument
|
|
||||||
if (*start)
|
|
||||||
start[1]=0 ;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OPT_PROTOCOL:
|
case OPT_PROTOCOL:
|
||||||
if (argument)
|
if (argument)
|
||||||
@ -5801,11 +5788,23 @@ void setup_error_messages()
|
|||||||
die("could not initialize error messages");
|
die("could not initialize error messages");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/** Handle mariabackup options. The options are handled with the following
|
||||||
handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
order:
|
||||||
|
|
||||||
|
1) Load server groups and process server options, ignore unknown options
|
||||||
|
2) Load client groups and process client options, ignore unknown options
|
||||||
|
3) Load backup groups and process client-server options, exit on unknown option
|
||||||
|
4) Process --mysqld-args options, ignore unknown options
|
||||||
|
|
||||||
|
@param[in] argc arguments count
|
||||||
|
@param[in] argv arguments array
|
||||||
|
@param[out] argv_server server options including loaded from server groups
|
||||||
|
@param[out] argv_client client options including loaded from client groups
|
||||||
|
@param[out] argv_backup backup options including loaded from backup groups */
|
||||||
|
void handle_options(int argc, char **argv, char ***argv_server,
|
||||||
|
char ***argv_client, char ***argv_backup)
|
||||||
{
|
{
|
||||||
/* Setup some variables for Innodb.*/
|
/* Setup some variables for Innodb.*/
|
||||||
|
|
||||||
srv_operation = SRV_OPERATION_RESTORE;
|
srv_operation = SRV_OPERATION_RESTORE;
|
||||||
|
|
||||||
files_charset_info = &my_charset_utf8mb3_general_ci;
|
files_charset_info = &my_charset_utf8mb3_general_ci;
|
||||||
@ -5832,49 +5831,64 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
bool prepare = false;
|
bool prepare = false;
|
||||||
|
|
||||||
char conf_file[FN_REFLEN];
|
char conf_file[FN_REFLEN];
|
||||||
int argc_client = argc;
|
|
||||||
int argc_server = argc;
|
// array_elements() will not work for load_defaults, as it is defined
|
||||||
|
// as external symbol, so let's use dynamic array to have ability to
|
||||||
|
// add new server default groups
|
||||||
|
std::vector<const char *> server_default_groups;
|
||||||
|
|
||||||
|
for (const char **default_group= load_default_groups; *default_group;
|
||||||
|
++default_group)
|
||||||
|
server_default_groups.push_back(*default_group);
|
||||||
|
|
||||||
|
std::vector<char *> mysqld_args;
|
||||||
|
std::vector<char *> mariabackup_args;
|
||||||
|
mysqld_args.push_back(argv[0]);
|
||||||
|
mariabackup_args.push_back(argv[0]);
|
||||||
|
|
||||||
/* scan options for group and config file to load defaults from */
|
/* scan options for group and config file to load defaults from */
|
||||||
for (i = 1; i < argc; i++) {
|
for (i= 1; i < argc; i++)
|
||||||
|
{
|
||||||
char *optend= strcend(argv[i], '=');
|
char *optend= strcend(argv[i], '=');
|
||||||
|
if (mysqld_args.size() > 1 ||
|
||||||
if (strncmp(argv[i], "--defaults-group",
|
strncmp(argv[i], "--mysqld-args", optend - argv[i]) == 0)
|
||||||
optend - argv[i]) == 0) {
|
{
|
||||||
defaults_group = optend + 1;
|
mysqld_args.push_back(argv[i]);
|
||||||
append_defaults_group(defaults_group,
|
continue;
|
||||||
xb_server_default_groups,
|
|
||||||
array_elements(xb_server_default_groups));
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
mariabackup_args.push_back(argv[i]);
|
||||||
|
|
||||||
if (strncmp(argv[i], "--login-path",
|
if (strncmp(argv[i], "--defaults-group", optend - argv[i]) == 0)
|
||||||
optend - argv[i]) == 0) {
|
{
|
||||||
append_defaults_group(optend + 1,
|
defaults_group= optend + 1;
|
||||||
xb_client_default_groups,
|
server_default_groups.push_back(defaults_group);
|
||||||
|
}
|
||||||
|
else if (strncmp(argv[i], "--login-path", optend - argv[i]) == 0)
|
||||||
|
{
|
||||||
|
append_defaults_group(optend + 1, xb_client_default_groups,
|
||||||
array_elements(xb_client_default_groups));
|
array_elements(xb_client_default_groups));
|
||||||
}
|
}
|
||||||
|
else if (!strncmp(argv[i], "--prepare", optend - argv[i]))
|
||||||
if (!strncmp(argv[i], "--prepare",
|
{
|
||||||
optend - argv[i])) {
|
|
||||||
prepare= true;
|
prepare= true;
|
||||||
}
|
}
|
||||||
|
else if (!strncmp(argv[i], "--apply-log", optend - argv[i]))
|
||||||
if (!strncmp(argv[i], "--apply-log",
|
{
|
||||||
optend - argv[i])) {
|
|
||||||
prepare= true;
|
prepare= true;
|
||||||
}
|
}
|
||||||
|
else if (!strncmp(argv[i], "--target-dir", optend - argv[i]) &&
|
||||||
if (!strncmp(argv[i], "--target-dir",
|
*optend)
|
||||||
optend - argv[i]) && *optend) {
|
{
|
||||||
target_dir= optend + 1;
|
target_dir= optend + 1;
|
||||||
}
|
}
|
||||||
|
else if (!*optend && argv[i][0] != '-')
|
||||||
if (!*optend && argv[i][0] != '-') {
|
{
|
||||||
target_dir= argv[i];
|
target_dir= argv[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
server_default_groups.push_back(NULL);
|
||||||
snprintf(conf_file, sizeof(conf_file), "my");
|
snprintf(conf_file, sizeof(conf_file), "my");
|
||||||
|
|
||||||
if (prepare && target_dir) {
|
if (prepare && target_dir) {
|
||||||
@ -5890,9 +5904,15 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*argv_client = argv;
|
*argv_client= *argv_server= *argv_backup= &mariabackup_args[0];
|
||||||
*argv_server = argv;
|
int argc_backup= static_cast<int>(mariabackup_args.size());
|
||||||
load_defaults_or_exit(conf_file, xb_server_default_groups,
|
int argc_client= argc_backup;
|
||||||
|
int argc_server= argc_backup;
|
||||||
|
|
||||||
|
/* 1) Load server groups and process server options, ignore unknown
|
||||||
|
options */
|
||||||
|
|
||||||
|
load_defaults_or_exit(conf_file, &server_default_groups[0],
|
||||||
&argc_server, argv_server);
|
&argc_server, argv_server);
|
||||||
|
|
||||||
int n;
|
int n;
|
||||||
@ -5913,7 +5933,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
optp->u_max_value = (G_PTR *) &global_max_value;
|
optp->u_max_value = (G_PTR *) &global_max_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Throw a descriptive error if --defaults-file or --defaults-extra-file
|
/* Throw a descriptive error if --defaults-file or --defaults-extra-file
|
||||||
is not the first command line argument */
|
is not the first command line argument */
|
||||||
for (int i = 2 ; i < argc ; i++) {
|
for (int i = 2 ; i < argc ; i++) {
|
||||||
@ -5935,6 +5954,9 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
xb_server_options, xb_get_one_option)))
|
xb_server_options, xb_get_one_option)))
|
||||||
exit(ho_error);
|
exit(ho_error);
|
||||||
|
|
||||||
|
/* 2) Load client groups and process client options, ignore unknown
|
||||||
|
options */
|
||||||
|
|
||||||
load_defaults_or_exit(conf_file, xb_client_default_groups,
|
load_defaults_or_exit(conf_file, xb_client_default_groups,
|
||||||
&argc_client, argv_client);
|
&argc_client, argv_client);
|
||||||
|
|
||||||
@ -5942,8 +5964,6 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
argc_client = n;
|
argc_client = n;
|
||||||
|
|
||||||
if (innobackupex_mode && argc_client > 0) {
|
if (innobackupex_mode && argc_client > 0) {
|
||||||
/* emulate innobackupex script */
|
|
||||||
innobackupex_mode = true;
|
|
||||||
if (!ibx_handle_options(&argc_client, argv_client)) {
|
if (!ibx_handle_options(&argc_client, argv_client)) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -5954,18 +5974,76 @@ handle_options(int argc, char **argv, char ***argv_client, char ***argv_server)
|
|||||||
xb_client_options, xb_get_one_option)))
|
xb_client_options, xb_get_one_option)))
|
||||||
exit(ho_error);
|
exit(ho_error);
|
||||||
|
|
||||||
|
/* 3) Load backup groups and process client-server options, exit on
|
||||||
|
unknown option */
|
||||||
|
|
||||||
|
load_defaults_or_exit(conf_file, backup_default_groups, &argc_backup,
|
||||||
|
argv_backup);
|
||||||
|
for (n= 0; (*argv_backup)[n]; n++)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
argc_backup= n;
|
||||||
|
|
||||||
|
my_handle_options_init_variables = FALSE;
|
||||||
|
|
||||||
|
if (argc_backup > 0 &&
|
||||||
|
(ho_error= handle_options(&argc_backup, argv_backup,
|
||||||
|
xb_server_options, xb_get_one_option)))
|
||||||
|
exit(ho_error);
|
||||||
|
|
||||||
|
/* Add back the program name handle_options removes */
|
||||||
|
++argc_backup;
|
||||||
|
--(*argv_backup);
|
||||||
|
|
||||||
|
if (innobackupex_mode && argc_backup > 0 &&
|
||||||
|
!ibx_handle_options(&argc_backup, argv_backup))
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
my_getopt_skip_unknown = FALSE;
|
||||||
|
|
||||||
|
if (argc_backup > 0 &&
|
||||||
|
(ho_error= handle_options(&argc_backup, argv_backup,
|
||||||
|
xb_client_options, xb_get_one_option)))
|
||||||
|
exit(ho_error);
|
||||||
|
|
||||||
|
if (opt_password)
|
||||||
|
{
|
||||||
|
char *argument= opt_password;
|
||||||
|
char *start= argument;
|
||||||
|
opt_password= my_strdup(PSI_NOT_INSTRUMENTED, opt_password, MYF(MY_FAE));
|
||||||
|
while (*argument)
|
||||||
|
*argument++= 'x'; // Destroy argument
|
||||||
|
if (*start)
|
||||||
|
start[1]= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 4) Process --mysqld-args options, ignore unknown options */
|
||||||
|
|
||||||
|
my_getopt_skip_unknown = TRUE;
|
||||||
|
|
||||||
|
int argc_mysqld = static_cast<int>(mysqld_args.size());
|
||||||
|
if (argc_mysqld > 1)
|
||||||
|
{
|
||||||
|
char **argv_mysqld= &mysqld_args[0];
|
||||||
|
if ((ho_error= handle_options(&argc_mysqld, &argv_mysqld,
|
||||||
|
xb_server_options, xb_get_one_option)))
|
||||||
|
exit(ho_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
my_handle_options_init_variables = TRUE;
|
||||||
|
|
||||||
/* Reject command line arguments that don't look like options, i.e. are
|
/* Reject command line arguments that don't look like options, i.e. are
|
||||||
not of the form '-X' (single-character options) or '--option' (long
|
not of the form '-X' (single-character options) or '--option' (long
|
||||||
options) */
|
options) */
|
||||||
for (int i = 0 ; i < argc_client ; i++) {
|
for (int i = 0 ; i < argc_backup ; i++) {
|
||||||
const char * const opt = (*argv_client)[i];
|
const char * const opt = (*argv_backup)[i];
|
||||||
|
|
||||||
if (strncmp(opt, "--", 2) &&
|
if (strncmp(opt, "--", 2) &&
|
||||||
!(strlen(opt) == 2 && opt[0] == '-')) {
|
!(strlen(opt) == 2 && opt[0] == '-')) {
|
||||||
bool server_option = true;
|
bool server_option = true;
|
||||||
|
|
||||||
for (int j = 0; j < argc_server; j++) {
|
for (int j = 0; j < argc_backup; j++) {
|
||||||
if (opt == (*argv_server)[j]) {
|
if (opt == (*argv_backup)[j]) {
|
||||||
server_option = false;
|
server_option = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -5986,7 +6064,9 @@ static int get_exepath(char *buf, size_t size, const char *argv0);
|
|||||||
/* ================= main =================== */
|
/* ================= main =================== */
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char **client_defaults, **server_defaults;
|
char **server_defaults;
|
||||||
|
char **client_defaults;
|
||||||
|
char **backup_defaults;
|
||||||
|
|
||||||
if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0]))
|
if (get_exepath(mariabackup_exe,FN_REFLEN, argv[0]))
|
||||||
strncpy(mariabackup_exe,argv[0], FN_REFLEN-1);
|
strncpy(mariabackup_exe,argv[0], FN_REFLEN-1);
|
||||||
@ -6037,7 +6117,8 @@ int main(int argc, char **argv)
|
|||||||
mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log,
|
mysql_mutex_init(key_LOCK_error_log, &LOCK_error_log,
|
||||||
MY_MUTEX_INIT_FAST);
|
MY_MUTEX_INIT_FAST);
|
||||||
|
|
||||||
handle_options(argc, argv, &client_defaults, &server_defaults);
|
handle_options(argc, argv, &server_defaults, &client_defaults,
|
||||||
|
&backup_defaults);
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
if (dbug_option) {
|
if (dbug_option) {
|
||||||
@ -6057,8 +6138,9 @@ int main(int argc, char **argv)
|
|||||||
ibx_cleanup();
|
ibx_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
free_defaults(client_defaults);
|
|
||||||
free_defaults(server_defaults);
|
free_defaults(server_defaults);
|
||||||
|
free_defaults(client_defaults);
|
||||||
|
free_defaults(backup_defaults);
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
if (dbug_option) {
|
if (dbug_option) {
|
||||||
|
@ -106,6 +106,7 @@ extern char *autoset_my_option;
|
|||||||
extern my_bool my_getopt_print_errors;
|
extern my_bool my_getopt_print_errors;
|
||||||
extern my_bool my_getopt_skip_unknown;
|
extern my_bool my_getopt_skip_unknown;
|
||||||
extern my_bool my_getopt_prefix_matching;
|
extern my_bool my_getopt_prefix_matching;
|
||||||
|
extern my_bool my_handle_options_init_variables;
|
||||||
extern my_error_reporter my_getopt_error_reporter;
|
extern my_error_reporter my_getopt_error_reporter;
|
||||||
extern my_getopt_value my_getopt_get_addr;
|
extern my_getopt_value my_getopt_get_addr;
|
||||||
|
|
||||||
|
@ -174,6 +174,8 @@ struct st_VioSSLFd
|
|||||||
int sslaccept(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
|
int sslaccept(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
|
||||||
int sslconnect(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
|
int sslconnect(struct st_VioSSLFd*, Vio *, long timeout, unsigned long *errptr);
|
||||||
|
|
||||||
|
void vio_check_ssl_init();
|
||||||
|
|
||||||
struct st_VioSSLFd
|
struct st_VioSSLFd
|
||||||
*new_VioSSLConnectorFd(const char *key_file, const char *cert_file,
|
*new_VioSSLConnectorFd(const char *key_file, const char *cert_file,
|
||||||
const char *ca_file, const char *ca_path,
|
const char *ca_file, const char *ca_path,
|
||||||
|
5
mysql-test/main/mdev_22370.result
Normal file
5
mysql-test/main/mdev_22370.result
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
connect con1,localhost,root,,;
|
||||||
|
SET DEBUG_DBUG='+d,mark_busy_mdev_22370';
|
||||||
|
FLUSH TABLES WITH READ LOCK;
|
||||||
|
connection default;
|
||||||
|
# restart
|
17
mysql-test/main/mdev_22370.test
Normal file
17
mysql-test/main/mdev_22370.test
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#
|
||||||
|
# MDEV-22370 safe_mutex: Trying to lock uninitialized mutex at
|
||||||
|
# /data/src/10.4-bug/sql/rpl_parallel.cc, line 470 upon shutdown during FTWRL
|
||||||
|
#
|
||||||
|
# Purpose of this test case to test crash while FTWRL and shutdown is in race
|
||||||
|
# condition
|
||||||
|
# Shutdown can execute first and destroy the mutex making mutex_lock in pool_mark_busy
|
||||||
|
# to crash
|
||||||
|
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--connect (con1,localhost,root,,)
|
||||||
|
SET DEBUG_DBUG='+d,mark_busy_mdev_22370';
|
||||||
|
--send
|
||||||
|
FLUSH TABLES WITH READ LOCK;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--source include/restart_mysqld.inc
|
@ -36,7 +36,7 @@ connection default;
|
|||||||
|
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir ;
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir ;
|
||||||
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir ;
|
exec $XTRABACKUP --prepare --verbose --target-dir=$basedir ;
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
||||||
@ -44,7 +44,7 @@ let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
|||||||
--source include/search_pattern_in_file.inc
|
--source include/search_pattern_in_file.inc
|
||||||
--echo # expect NOT FOUND
|
--echo # expect NOT FOUND
|
||||||
|
|
||||||
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
exec $XTRABACKUP --prepare --verbose --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
||||||
|
|
||||||
--source include/search_pattern_in_file.inc
|
--source include/search_pattern_in_file.inc
|
||||||
--echo # expect NOT FOUND
|
--echo # expect NOT FOUND
|
||||||
|
@ -11,7 +11,7 @@ INSERT INTO t VALUES(1);
|
|||||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir ;
|
exec $XTRABACKUP --prepare --target-dir=$basedir ;
|
||||||
|
|
||||||
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
||||||
--let SEARCH_PATTERN= Rolled back recovered transaction
|
--let SEARCH_PATTERN= Rolled back recovered transaction
|
||||||
|
@ -12,7 +12,7 @@ SHOW VARIABLES like 'log_bin';
|
|||||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
exec $XTRABACKUP --prepare --binlog-info=1 --apply-log-only --target-dir=$basedir ;
|
exec $XTRABACKUP --prepare --binlog-info=1 --target-dir=$basedir ;
|
||||||
|
|
||||||
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/current_test;
|
||||||
--let SEARCH_PATTERN= Last binlog file .*, position .*
|
--let SEARCH_PATTERN= Last binlog file .*, position .*
|
||||||
|
@ -33,7 +33,7 @@ select count(*) from t7;
|
|||||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir;
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir;
|
||||||
|
|
||||||
--echo # XTRABACKUP PREPARE
|
--echo # XTRABACKUP PREPARE
|
||||||
exec $XTRABACKUP --apply-log-only --prepare --target-dir=$basedir;
|
exec $XTRABACKUP --prepare --target-dir=$basedir;
|
||||||
|
|
||||||
--echo # XTRABACKUP INCREMENTAL PREPARE
|
--echo # XTRABACKUP INCREMENTAL PREPARE
|
||||||
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir;
|
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir;
|
||||||
|
@ -25,7 +25,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir
|
|||||||
--let after_load_tablespaces=
|
--let after_load_tablespaces=
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
echo # Prepare full backup, apply incremental one;
|
echo # Prepare full backup, apply incremental one;
|
||||||
exec $XTRABACKUP --apply-log-only --prepare --target-dir=$basedir;
|
exec $XTRABACKUP --prepare --target-dir=$basedir;
|
||||||
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
exec $XTRABACKUP --prepare --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
||||||
|
|
||||||
echo # Restore and check results;
|
echo # Restore and check results;
|
||||||
|
@ -30,9 +30,9 @@ remove_file $backuplog;
|
|||||||
|
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
echo # Prepare full backup, apply incremental one;
|
echo # Prepare full backup, apply incremental one;
|
||||||
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir;
|
exec $XTRABACKUP --prepare --verbose --target-dir=$basedir;
|
||||||
|
|
||||||
exec $XTRABACKUP --prepare --verbose --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
exec $XTRABACKUP --prepare --verbose --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
||||||
|
|
||||||
echo # Restore and check results;
|
echo # Restore and check results;
|
||||||
let $targetdir=$basedir;
|
let $targetdir=$basedir;
|
||||||
|
7
mysql-test/suite/mariabackup/options_check.result
Normal file
7
mysql-test/suite/mariabackup/options_check.result
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Check for unknown options in command-line
|
||||||
|
# Check for unknown options in "mariabackup" group
|
||||||
|
# Check for unknown options in "xtrabackup" group
|
||||||
|
# Check for unknown options in "mariadb-backup" group
|
||||||
|
# Check for options overwriting
|
||||||
|
# Check if uknown options that follow --mysqld-args are ingored
|
||||||
|
# Check if [mariadb-client] group is not loaded (MDEV-22894)
|
64
mysql-test/suite/mariabackup/options_check.test
Normal file
64
mysql-test/suite/mariabackup/options_check.test
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
||||||
|
--let $custom_cnf=$MYSQLTEST_VARDIR/tmp/custom_my.cnf
|
||||||
|
|
||||||
|
--echo # Check for unknown options in command-line
|
||||||
|
--disable_result_log
|
||||||
|
--error 7
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --unknown-option=xxx --target-dir=$targetdir;
|
||||||
|
--error 2
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --unknown-option --target-dir=$targetdir;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
--echo # Check for unknown options in "mariabackup" group
|
||||||
|
--write_file $custom_cnf
|
||||||
|
[mariabackup]
|
||||||
|
unknown-option=XXX
|
||||||
|
EOF
|
||||||
|
--error 7
|
||||||
|
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
|
||||||
|
--remove_file $custom_cnf
|
||||||
|
|
||||||
|
--echo # Check for unknown options in "xtrabackup" group
|
||||||
|
--write_file $custom_cnf
|
||||||
|
[xtrabackup]
|
||||||
|
unknown-option=XXX
|
||||||
|
EOF
|
||||||
|
--error 7
|
||||||
|
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
|
||||||
|
--remove_file $custom_cnf
|
||||||
|
|
||||||
|
--echo # Check for unknown options in "mariadb-backup" group
|
||||||
|
--write_file $custom_cnf
|
||||||
|
[mariadb-backup]
|
||||||
|
unknown-option=XXX
|
||||||
|
EOF
|
||||||
|
--error 7
|
||||||
|
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
|
||||||
|
--remove_file $custom_cnf
|
||||||
|
|
||||||
|
--echo # Check for options overwriting
|
||||||
|
--write_file $custom_cnf
|
||||||
|
[mariadbd]
|
||||||
|
innodb-flush-method=O_DIRECT
|
||||||
|
|
||||||
|
[mariabackup]
|
||||||
|
innodb-flush-method=blablabla
|
||||||
|
EOF
|
||||||
|
--error 13
|
||||||
|
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
|
||||||
|
--remove_file $custom_cnf
|
||||||
|
|
||||||
|
--echo # Check if uknown options that follow --mysqld-args are ingored
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir --mysqld-args --unknown-option;
|
||||||
|
--rmdir $targetdir
|
||||||
|
|
||||||
|
--echo # Check if [mariadb-client] group is not loaded (MDEV-22894)
|
||||||
|
--copy_file $MYSQLTEST_VARDIR/my.cnf $custom_cnf
|
||||||
|
--append_file $custom_cnf
|
||||||
|
[mariadb-client]
|
||||||
|
user=bla
|
||||||
|
password=bla
|
||||||
|
EOF
|
||||||
|
exec $XTRABACKUP --defaults-file=$custom_cnf --backup --target-dir=$targetdir;
|
||||||
|
--remove_file $custom_cnf
|
||||||
|
--rmdir $targetdir
|
@ -17,7 +17,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir
|
|||||||
list_files $basedir undo*;
|
list_files $basedir undo*;
|
||||||
|
|
||||||
--echo # xtrabackup prepare
|
--echo # xtrabackup prepare
|
||||||
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir;
|
exec $XTRABACKUP --prepare --target-dir=$basedir;
|
||||||
--echo # Display undo log files from targer directory
|
--echo # Display undo log files from targer directory
|
||||||
list_files $basedir undo*;
|
list_files $basedir undo*;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
|
|||||||
--disable_result_log
|
--disable_result_log
|
||||||
|
|
||||||
exec $INNOBACKUPEX --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp $targetdir;
|
exec $INNOBACKUPEX --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp $targetdir;
|
||||||
exec $INNOBACKUPEX --apply-log --rebuild-indexes --rebuild-threads=2 $targetdir;
|
exec $INNOBACKUPEX --apply-log $targetdir;
|
||||||
--source include/restart_and_restore.inc
|
--source include/restart_and_restore.inc
|
||||||
|
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
@ -38,7 +38,7 @@ INSERT INTO isam_p VALUES (1), (101), (201), (301);
|
|||||||
let $targetdir=$MYSQLTEST_VARDIR/tmp;
|
let $targetdir=$MYSQLTEST_VARDIR/tmp;
|
||||||
|
|
||||||
--disable_result_log
|
--disable_result_log
|
||||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --no-timestamp --backup --target-dir=$targetdir/full;
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir/full;
|
||||||
--enable_result_log
|
--enable_result_log
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2002, 2013, Oracle and/or its affiliates
|
Copyright (c) 2002, 2013, Oracle and/or its affiliates
|
||||||
Copyright (c) 2009, 2015, MariaDB
|
Copyright (c) 2009, 2020, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -79,6 +79,12 @@ my_bool my_getopt_skip_unknown= 0;
|
|||||||
*/
|
*/
|
||||||
my_bool my_getopt_prefix_matching= 1;
|
my_bool my_getopt_prefix_matching= 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is a flag that can be set in client programs. 1 means that
|
||||||
|
handle_options() will not initialize options to default values.
|
||||||
|
*/
|
||||||
|
my_bool my_handle_options_init_variables = 1;
|
||||||
|
|
||||||
my_getopt_value my_getopt_get_addr= 0;
|
my_getopt_value my_getopt_get_addr= 0;
|
||||||
|
|
||||||
static void default_reporter(enum loglevel level, const char *format, ...)
|
static void default_reporter(enum loglevel level, const char *format, ...)
|
||||||
@ -205,6 +211,7 @@ int handle_options(int *argc, char ***argv, const struct my_option *longopts,
|
|||||||
DBUG_ASSERT(*argv);
|
DBUG_ASSERT(*argv);
|
||||||
(*argc)--; /* Skip the program name */
|
(*argc)--; /* Skip the program name */
|
||||||
(*argv)++; /* --- || ---- */
|
(*argv)++; /* --- || ---- */
|
||||||
|
if (my_handle_options_init_variables)
|
||||||
init_variables(longopts, init_one_value);
|
init_variables(longopts, init_one_value);
|
||||||
|
|
||||||
is_cmdline_arg= !is_file_marker(**argv);
|
is_cmdline_arg= !is_file_marker(**argv);
|
||||||
|
@ -56,8 +56,6 @@ sfmt="tar"
|
|||||||
strmcmd=""
|
strmcmd=""
|
||||||
tfmt=""
|
tfmt=""
|
||||||
tcmd=""
|
tcmd=""
|
||||||
rebuild=0
|
|
||||||
rebuildcmd=""
|
|
||||||
payload=0
|
payload=0
|
||||||
pvformat="-F '%N => Rate:%r Avg:%a Elapsed:%t %e Bytes: %b %p' "
|
pvformat="-F '%N => Rate:%r Avg:%a Elapsed:%t %e Bytes: %b %p' "
|
||||||
pvopts="-f -i 10 -N $WSREP_SST_OPT_ROLE "
|
pvopts="-f -i 10 -N $WSREP_SST_OPT_ROLE "
|
||||||
@ -339,7 +337,6 @@ read_cnf()
|
|||||||
encrypt=$(parse_cnf sst encrypt 0)
|
encrypt=$(parse_cnf sst encrypt 0)
|
||||||
sockopt=$(parse_cnf sst sockopt "")
|
sockopt=$(parse_cnf sst sockopt "")
|
||||||
progress=$(parse_cnf sst progress "")
|
progress=$(parse_cnf sst progress "")
|
||||||
rebuild=$(parse_cnf sst rebuild 0)
|
|
||||||
ttime=$(parse_cnf sst time 0)
|
ttime=$(parse_cnf sst time 0)
|
||||||
cpat=$(parse_cnf sst cpat '.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$')
|
cpat=$(parse_cnf sst cpat '.*galera\.cache$\|.*sst_in_progress$\|.*\.sst$\|.*gvwstate\.dat$\|.*grastate\.dat$\|.*\.err$\|.*\.log$\|.*RPM_UPGRADE_MARKER$\|.*RPM_UPGRADE_HISTORY$')
|
||||||
[[ $OS == "FreeBSD" ]] && cpat=$(parse_cnf sst cpat '.*galera\.cache$|.*sst_in_progress$|.*\.sst$|.*gvwstate\.dat$|.*grastate\.dat$|.*\.err$|.*\.log$|.*RPM_UPGRADE_MARKER$|.*RPM_UPGRADE_HISTORY$')
|
[[ $OS == "FreeBSD" ]] && cpat=$(parse_cnf sst cpat '.*galera\.cache$|.*sst_in_progress$|.*\.sst$|.*gvwstate\.dat$|.*grastate\.dat$|.*\.err$|.*\.log$|.*RPM_UPGRADE_MARKER$|.*RPM_UPGRADE_HISTORY$')
|
||||||
@ -708,7 +705,7 @@ if [[ ${FORCE_FTWRL:-0} -eq 1 ]];then
|
|||||||
iopts+=" --no-backup-locks "
|
iopts+=" --no-backup-locks "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
INNOEXTRA=$WSREP_SST_OPT_MYSQLD
|
INNOEXTRA=
|
||||||
|
|
||||||
INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
||||||
# Try to set INNODB_DATA_HOME_DIR from the command line:
|
# Try to set INNODB_DATA_HOME_DIR from the command line:
|
||||||
@ -754,9 +751,9 @@ if [[ $ssyslog -eq 1 ]];then
|
|||||||
logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
|
logger -p daemon.info -t ${ssystag}wsrep-sst-$WSREP_SST_OPT_ROLE "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
INNOAPPLY="${INNOBACKUPEX_BIN} --innobackupex $disver $iapts \$INNOEXTRA --apply-log \$rebuildcmd \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply"
|
INNOAPPLY="${INNOBACKUPEX_BIN} --prepare $disver $iapts \$INNOEXTRA --target-dir=\${DATA} --mysqld-args \$WSREP_SST_OPT_MYSQLD 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-apply"
|
||||||
INNOMOVE="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move"
|
INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --move-back $disver $impts --force-non-empty-directories --target-dir=\${DATA} 2>&1 | logger -p daemon.err -t ${ssystag}innobackupex-move"
|
||||||
INNOBACKUP="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)"
|
INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --backup $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt --target-dir=\$itmpdir --mysqld-args \$WSREP_SST_OPT_MYSQLD 2> >(logger -p daemon.err -t ${ssystag}innobackupex-backup)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -818,9 +815,9 @@ then
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
INNOAPPLY="${INNOBACKUPEX_BIN} --innobackupex $disver $iapts \$INNOEXTRA --apply-log \$rebuildcmd \${DATA} &> ${INNOAPPLYLOG}"
|
INNOAPPLY="${INNOBACKUPEX_BIN} --prepare $disver $iapts \$INNOEXTRA --target-dir=\${DATA} --mysqld-args \$WSREP_SST_OPT_MYSQLD &> ${INNOAPPLYLOG}"
|
||||||
INNOMOVE="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} &> ${INNOMOVELOG}"
|
INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --move-back $disver $impts --move-back --force-non-empty-directories --target-dir=\${DATA} &> ${INNOMOVELOG}"
|
||||||
INNOBACKUP="${INNOBACKUPEX_BIN} --innobackupex ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir 2> ${INNOBACKUPLOG}"
|
INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} --backup $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt --target-dir=\$itmpdir --mysqld-args \$WSREP_SST_OPT_MYSQLD 2> ${INNOBACKUPLOG}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
get_stream
|
get_stream
|
||||||
@ -862,15 +859,6 @@ then
|
|||||||
INNOEXTRA+=" --password="
|
INNOEXTRA+=" --password="
|
||||||
fi
|
fi
|
||||||
|
|
||||||
get_keys
|
|
||||||
if [[ $encrypt -eq 1 ]];then
|
|
||||||
if [[ -n $ekey ]];then
|
|
||||||
INNOEXTRA+=" --encrypt=$ealgo --encrypt-key=$ekey"
|
|
||||||
else
|
|
||||||
INNOEXTRA+=" --encrypt=$ealgo --encrypt-key-file=$ekeyfile"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
check_extra
|
check_extra
|
||||||
|
|
||||||
wsrep_log_info "Streaming GTID file before SST"
|
wsrep_log_info "Streaming GTID file before SST"
|
||||||
@ -1091,18 +1079,6 @@ then
|
|||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Rebuild indexes for compact backups
|
|
||||||
if grep -q 'compact = 1' ${DATA}/xtrabackup_checkpoints;then
|
|
||||||
wsrep_log_info "Index compaction detected"
|
|
||||||
rebuild=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $rebuild -eq 1 ]];then
|
|
||||||
nthreads=$(parse_cnf xtrabackup rebuild-threads $nproc)
|
|
||||||
wsrep_log_info "Rebuilding during prepare with $nthreads threads"
|
|
||||||
rebuildcmd="--rebuild-indexes --rebuild-threads=$nthreads"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$(find ${DATA} -maxdepth 1 -type f -name '*.qp' -print -quit)";then
|
if test -n "$(find ${DATA} -maxdepth 1 -type f -name '*.qp' -print -quit)";then
|
||||||
|
|
||||||
wsrep_log_info "Compressed qpress files found"
|
wsrep_log_info "Compressed qpress files found"
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "sql_plugin.h"
|
#include "sql_plugin.h"
|
||||||
#include <my_crypt.h>
|
#include <my_crypt.h>
|
||||||
|
#include <violite.h>
|
||||||
|
|
||||||
/* there can be only one encryption plugin enabled */
|
/* there can be only one encryption plugin enabled */
|
||||||
static plugin_ref encryption_manager= 0;
|
static plugin_ref encryption_manager= 0;
|
||||||
@ -63,6 +64,8 @@ int initialize_encryption_plugin(st_plugin_int *plugin)
|
|||||||
if (encryption_manager)
|
if (encryption_manager)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
vio_check_ssl_init();
|
||||||
|
|
||||||
if (plugin->plugin->init && plugin->plugin->init(plugin))
|
if (plugin->plugin->init && plugin->plugin->init(plugin))
|
||||||
{
|
{
|
||||||
sql_print_error("Plugin '%s' init function returned error.",
|
sql_print_error("Plugin '%s' init function returned error.",
|
||||||
|
@ -15942,15 +15942,6 @@ static void print_key_value(String *out, const KEY_PART_INFO *key_part,
|
|||||||
{
|
{
|
||||||
field= key_part->field;
|
field= key_part->field;
|
||||||
store_length= key_part->store_length;
|
store_length= key_part->store_length;
|
||||||
if (field->flags & BLOB_FLAG)
|
|
||||||
{
|
|
||||||
// Byte 0 of a nullable key is the null-byte. If set, key is NULL.
|
|
||||||
if (field->real_maybe_null() && *key)
|
|
||||||
{
|
|
||||||
out->append(STRING_WITH_LEN("NULL"));
|
|
||||||
goto next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (field->real_maybe_null())
|
if (field->real_maybe_null())
|
||||||
{
|
{
|
||||||
|
@ -467,6 +467,7 @@ pool_mark_busy(rpl_parallel_thread_pool *pool, THD *thd)
|
|||||||
So we protect the infrequent operations of FLUSH TABLES WITH READ LOCK and
|
So we protect the infrequent operations of FLUSH TABLES WITH READ LOCK and
|
||||||
pool size changes with this condition wait.
|
pool size changes with this condition wait.
|
||||||
*/
|
*/
|
||||||
|
DBUG_EXECUTE_IF("mark_busy_mdev_22370",my_sleep(1000000););
|
||||||
mysql_mutex_lock(&pool->LOCK_rpl_thread_pool);
|
mysql_mutex_lock(&pool->LOCK_rpl_thread_pool);
|
||||||
if (thd)
|
if (thd)
|
||||||
{
|
{
|
||||||
@ -2012,10 +2013,24 @@ rpl_parallel_thread_pool::init(uint32 size)
|
|||||||
|
|
||||||
void
|
void
|
||||||
rpl_parallel_thread_pool::destroy()
|
rpl_parallel_thread_pool::destroy()
|
||||||
|
{
|
||||||
|
deactivate();
|
||||||
|
destroy_cond_mutex();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rpl_parallel_thread_pool::deactivate()
|
||||||
{
|
{
|
||||||
if (!inited)
|
if (!inited)
|
||||||
return;
|
return;
|
||||||
rpl_parallel_change_thread_count(this, 0, 1);
|
rpl_parallel_change_thread_count(this, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rpl_parallel_thread_pool::destroy_cond_mutex()
|
||||||
|
{
|
||||||
|
if (!inited)
|
||||||
|
return;
|
||||||
mysql_mutex_destroy(&LOCK_rpl_thread_pool);
|
mysql_mutex_destroy(&LOCK_rpl_thread_pool);
|
||||||
mysql_cond_destroy(&COND_rpl_thread_pool);
|
mysql_cond_destroy(&COND_rpl_thread_pool);
|
||||||
inited= false;
|
inited= false;
|
||||||
|
@ -244,6 +244,8 @@ struct rpl_parallel_thread_pool {
|
|||||||
rpl_parallel_thread_pool();
|
rpl_parallel_thread_pool();
|
||||||
int init(uint32 size);
|
int init(uint32 size);
|
||||||
void destroy();
|
void destroy();
|
||||||
|
void deactivate();
|
||||||
|
void destroy_cond_mutex();
|
||||||
struct rpl_parallel_thread *get_thread(rpl_parallel_thread **owner,
|
struct rpl_parallel_thread *get_thread(rpl_parallel_thread **owner,
|
||||||
rpl_parallel_entry *entry);
|
rpl_parallel_entry *entry);
|
||||||
void release_thread(rpl_parallel_thread *rpt);
|
void release_thread(rpl_parallel_thread *rpt);
|
||||||
|
@ -1448,7 +1448,7 @@ void slave_prepare_for_shutdown()
|
|||||||
mysql_mutex_unlock(&LOCK_active_mi);
|
mysql_mutex_unlock(&LOCK_active_mi);
|
||||||
// It's safe to destruct worker pool now when
|
// It's safe to destruct worker pool now when
|
||||||
// all driver threads are gone.
|
// all driver threads are gone.
|
||||||
global_rpl_thread_pool.destroy();
|
global_rpl_thread_pool.deactivate();
|
||||||
stop_slave_background_thread();
|
stop_slave_background_thread();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ before_first:
|
|||||||
ut_ad(index->is_instant());
|
ut_ad(index->is_instant());
|
||||||
ut_ad(page_get_n_recs(block->frame) == 1);
|
ut_ad(page_get_n_recs(block->frame) == 1);
|
||||||
ut_ad(page_is_leaf(block->frame));
|
ut_ad(page_is_leaf(block->frame));
|
||||||
ut_ad(!page_has_siblings(block->frame));
|
ut_ad(!page_has_prev(block->frame));
|
||||||
cursor->rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE;
|
cursor->rel_pos = BTR_PCUR_AFTER_LAST_IN_TREE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -840,14 +840,9 @@ static trx_rseg_t* trx_assign_rseg_low()
|
|||||||
|
|
||||||
/* Choose a rollback segment evenly distributed between 0 and
|
/* Choose a rollback segment evenly distributed between 0 and
|
||||||
innodb_undo_logs-1 in a round-robin fashion, skipping those
|
innodb_undo_logs-1 in a round-robin fashion, skipping those
|
||||||
undo tablespaces that are scheduled for truncation.
|
undo tablespaces that are scheduled for truncation. */
|
||||||
|
static Atomic_counter<unsigned> rseg_slot;
|
||||||
Because rseg_slot is not protected by atomics or any mutex, race
|
unsigned slot = rseg_slot++ % TRX_SYS_N_RSEGS;
|
||||||
conditions are possible, meaning that multiple transactions
|
|
||||||
that start modifications concurrently will write their undo
|
|
||||||
log to the same rollback segment. */
|
|
||||||
static ulong rseg_slot;
|
|
||||||
ulint slot = rseg_slot++ % TRX_SYS_N_RSEGS;
|
|
||||||
ut_d(if (trx_rseg_n_slots_debug) slot = 0);
|
ut_d(if (trx_rseg_n_slots_debug) slot = 0);
|
||||||
trx_rseg_t* rseg;
|
trx_rseg_t* rseg;
|
||||||
|
|
||||||
@ -926,11 +921,8 @@ trx_t::assign_temp_rseg()
|
|||||||
compile_time_assert(ut_is_2pow(TRX_SYS_N_RSEGS));
|
compile_time_assert(ut_is_2pow(TRX_SYS_N_RSEGS));
|
||||||
|
|
||||||
/* Choose a temporary rollback segment between 0 and 127
|
/* Choose a temporary rollback segment between 0 and 127
|
||||||
in a round-robin fashion. Because rseg_slot is not protected by
|
in a round-robin fashion. */
|
||||||
atomics or any mutex, race conditions are possible, meaning that
|
static Atomic_counter<unsigned> rseg_slot;
|
||||||
multiple transactions that start modifications concurrently
|
|
||||||
will write their undo log to the same rollback segment. */
|
|
||||||
static ulong rseg_slot;
|
|
||||||
trx_rseg_t* rseg = trx_sys.temp_rsegs[
|
trx_rseg_t* rseg = trx_sys.temp_rsegs[
|
||||||
rseg_slot++ & (TRX_SYS_N_RSEGS - 1)];
|
rseg_slot++ & (TRX_SYS_N_RSEGS - 1)];
|
||||||
ut_ad(!rseg->is_persistent());
|
ut_ad(!rseg->is_persistent());
|
||||||
|
@ -150,7 +150,7 @@ vio_set_cert_stuff(SSL_CTX *ctx, const char *cert_file, const char *key_file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void check_ssl_init()
|
void vio_check_ssl_init()
|
||||||
{
|
{
|
||||||
if (!ssl_algorithms_added)
|
if (!ssl_algorithms_added)
|
||||||
{
|
{
|
||||||
@ -243,7 +243,7 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
|
|||||||
crl_file ? crl_file : "NULL",
|
crl_file ? crl_file : "NULL",
|
||||||
crl_path ? crl_path : "NULL"));
|
crl_path ? crl_path : "NULL"));
|
||||||
|
|
||||||
check_ssl_init();
|
vio_check_ssl_init();
|
||||||
|
|
||||||
if (!(ssl_fd= ((struct st_VioSSLFd*)
|
if (!(ssl_fd= ((struct st_VioSSLFd*)
|
||||||
my_malloc(key_memory_vio_ssl_fd,
|
my_malloc(key_memory_vio_ssl_fd,
|
||||||
|
Reference in New Issue
Block a user