mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
revert mariabackup part of MDEV-27524, fix the test
This commit is contained in:
parent
6a3fbfdb2d
commit
5197519f4f
10 changed files with 90 additions and 354 deletions
|
@ -581,6 +581,7 @@ datafile_read(datafile_cur_t *cursor)
|
|||
Check to see if a file exists.
|
||||
Takes name of the file to check.
|
||||
@return true if file exists. */
|
||||
static
|
||||
bool
|
||||
file_exists(const char *filename)
|
||||
{
|
||||
|
@ -1543,14 +1544,13 @@ bool backup_start(CorruptedPages &corrupted_pages)
|
|||
if (!write_galera_info(mysql_connection)) {
|
||||
return(false);
|
||||
}
|
||||
write_current_binlog_file(mysql_connection);
|
||||
}
|
||||
|
||||
bool with_binlogs = opt_binlog_info == BINLOG_INFO_ON;
|
||||
if (opt_binlog_info == BINLOG_INFO_ON) {
|
||||
|
||||
if (with_binlogs || opt_galera_info) {
|
||||
if (!write_current_binlog_file(mysql_connection, with_binlogs)) {
|
||||
return(false);
|
||||
}
|
||||
lock_binlog_maybe(mysql_connection);
|
||||
write_binlog_info(mysql_connection);
|
||||
}
|
||||
|
||||
if (have_flush_engine_logs && !opt_no_lock) {
|
||||
|
@ -1584,34 +1584,15 @@ void backup_release()
|
|||
}
|
||||
}
|
||||
|
||||
static const char *default_buffer_pool_file = "ib_buffer_pool";
|
||||
|
||||
static
|
||||
const char * get_buffer_pool_filename(size_t *length)
|
||||
{
|
||||
/* If mariabackup is run for Galera, then the file
|
||||
name is changed to the default so that the receiving
|
||||
node can find this file and rename it according to its
|
||||
settings, otherwise we keep the original file name: */
|
||||
size_t dir_length = 0;
|
||||
const char *dst_name = default_buffer_pool_file;
|
||||
if (!opt_galera_info) {
|
||||
dir_length = dirname_length(buffer_pool_filename);
|
||||
dst_name = buffer_pool_filename + dir_length;
|
||||
}
|
||||
if (length) {
|
||||
*length=dir_length;
|
||||
}
|
||||
return dst_name;
|
||||
}
|
||||
|
||||
/** Finish after backup_start() and backup_release() */
|
||||
bool backup_finish()
|
||||
{
|
||||
/* Copy buffer pool dump or LRU dump */
|
||||
if (!opt_rsync) {
|
||||
if (buffer_pool_filename && file_exists(buffer_pool_filename)) {
|
||||
const char *dst_name = get_buffer_pool_filename(NULL);
|
||||
const char *dst_name;
|
||||
|
||||
dst_name = trim_dotslash(buffer_pool_filename);
|
||||
copy_file(ds_data, buffer_pool_filename, dst_name, 0);
|
||||
}
|
||||
if (file_exists("ib_lru_dump")) {
|
||||
|
@ -1700,14 +1681,17 @@ ibx_copy_incremental_over_full()
|
|||
|
||||
/* copy buffer pool dump */
|
||||
if (innobase_buffer_pool_filename) {
|
||||
const char *src_name = get_buffer_pool_filename(NULL);
|
||||
const char *src_name;
|
||||
|
||||
src_name = trim_dotslash(innobase_buffer_pool_filename);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/%s",
|
||||
xtrabackup_incremental_dir,
|
||||
src_name);
|
||||
|
||||
if (file_exists(path)) {
|
||||
copy_file(ds_data, path, src_name, 0);
|
||||
copy_file(ds_data, path,
|
||||
innobase_buffer_pool_filename, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1942,14 +1926,6 @@ copy_back()
|
|||
|
||||
datadir_node_init(&node);
|
||||
|
||||
/* If mariabackup is run for Galera, then the file
|
||||
name is changed to the default so that the receiving
|
||||
node can find this file and rename it according to its
|
||||
settings, otherwise we keep the original file name: */
|
||||
size_t dir_length;
|
||||
const char *src_buffer_pool;
|
||||
src_buffer_pool = get_buffer_pool_filename(&dir_length);
|
||||
|
||||
while (datadir_iter_next(it, &node)) {
|
||||
const char *ext_list[] = {"backup-my.cnf",
|
||||
"xtrabackup_binary", "xtrabackup_binlog_info",
|
||||
|
@ -2012,11 +1988,6 @@ copy_back()
|
|||
continue;
|
||||
}
|
||||
|
||||
/* skip buffer pool dump */
|
||||
if (!strcmp(filename, src_buffer_pool)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* skip innodb data files */
|
||||
is_ibdata_file = false;
|
||||
for (Tablespace::const_iterator iter(srv_sys_space.begin()),
|
||||
|
@ -2039,18 +2010,23 @@ copy_back()
|
|||
|
||||
/* copy buffer pool dump */
|
||||
|
||||
if (file_exists(src_buffer_pool)) {
|
||||
char dst_dir[FN_REFLEN];
|
||||
while (IS_TRAILING_SLASH(buffer_pool_filename, dir_length)) {
|
||||
dir_length--;
|
||||
}
|
||||
memcpy(dst_dir, buffer_pool_filename, dir_length);
|
||||
dst_dir[dir_length] = 0;
|
||||
if (!(ret = copy_or_move_file(src_buffer_pool,
|
||||
src_buffer_pool,
|
||||
dst_dir, 1)))
|
||||
{
|
||||
goto cleanup;
|
||||
if (innobase_buffer_pool_filename) {
|
||||
const char *src_name;
|
||||
char path[FN_REFLEN];
|
||||
|
||||
src_name = trim_dotslash(innobase_buffer_pool_filename);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/%s",
|
||||
mysql_data_home,
|
||||
src_name);
|
||||
|
||||
/* could be already copied with other files
|
||||
from data directory */
|
||||
if (file_exists(src_name) &&
|
||||
!file_exists(innobase_buffer_pool_filename)) {
|
||||
copy_or_move_file(src_name,
|
||||
innobase_buffer_pool_filename,
|
||||
mysql_data_home, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,13 +32,6 @@ copy_file(ds_ctxt_t *datasink,
|
|||
const char *dst_file_path,
|
||||
uint thread_n);
|
||||
|
||||
/************************************************************************
|
||||
Check to see if a file exists.
|
||||
Takes name of the file to check.
|
||||
@return true if file exists. */
|
||||
bool
|
||||
file_exists(const char *filename);
|
||||
|
||||
/** Start --backup */
|
||||
bool backup_start(CorruptedPages &corrupted_pages);
|
||||
/** Release resources after backup_start() */
|
||||
|
|
|
@ -84,6 +84,7 @@ os_event_t kill_query_thread_stop;
|
|||
bool sql_thread_started = false;
|
||||
char *mysql_slave_position = NULL;
|
||||
char *mysql_binlog_position = NULL;
|
||||
char *buffer_pool_filename = NULL;
|
||||
|
||||
/* History on server */
|
||||
time_t history_start_time;
|
||||
|
@ -1573,29 +1574,27 @@ cleanup:
|
|||
}
|
||||
|
||||
|
||||
static
|
||||
bool
|
||||
write_binlog_info(MYSQL *connection, char *log_bin_dir,
|
||||
MYSQL_RES *mysql_result, my_ulonglong n_rows,
|
||||
my_ulonglong start);
|
||||
|
||||
/*********************************************************************//**
|
||||
Flush and copy the current binary log file into the backup,
|
||||
if GTID is enabled */
|
||||
bool
|
||||
write_current_binlog_file(MYSQL *connection, bool write_binlogs)
|
||||
write_current_binlog_file(MYSQL *connection)
|
||||
{
|
||||
char *log_bin = NULL;
|
||||
char *filename = NULL;
|
||||
char *position = NULL;
|
||||
char *executed_gtid_set = NULL;
|
||||
char *gtid_binlog_state = NULL;
|
||||
char *log_bin_file = NULL;
|
||||
char *log_bin_dir = NULL;
|
||||
bool gtid_exists;
|
||||
bool result = true;
|
||||
char filepath[FN_REFLEN];
|
||||
|
||||
mysql_variable log_bin_var[] = {
|
||||
{"@@GLOBAL.log_bin", &log_bin},
|
||||
mysql_variable status[] = {
|
||||
{"Executed_Gtid_Set", &executed_gtid_set},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
mysql_variable status_after_flush[] = {
|
||||
{"File", &log_bin_file},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -1605,36 +1604,21 @@ write_current_binlog_file(MYSQL *connection, bool write_binlogs)
|
|||
{NULL, NULL}
|
||||
};
|
||||
|
||||
mysql_variable status[] = {
|
||||
{"File", &filename},
|
||||
{"Position", &position},
|
||||
{"Executed_Gtid_Set", &executed_gtid_set},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
read_mysql_variables(connection, "SELECT @@GLOBAL.log_bin", log_bin_var, false);
|
||||
|
||||
/* Do not create xtrabackup_binlog_info if binary log is disabled: */
|
||||
if (strncmp(log_bin, "1", 2) != 0) {
|
||||
goto binlog_disabled;
|
||||
}
|
||||
|
||||
lock_binlog_maybe(connection);
|
||||
|
||||
read_mysql_variables(connection, "SHOW MASTER STATUS", status, false);
|
||||
|
||||
/* Do not create xtrabackup_binlog_info if replication
|
||||
has not started yet: */
|
||||
if (filename == NULL || position == NULL) {
|
||||
goto no_replication;
|
||||
}
|
||||
|
||||
read_mysql_variables(connection, "SHOW VARIABLES", vars, true);
|
||||
|
||||
gtid_exists = (executed_gtid_set && *executed_gtid_set)
|
||||
|| (gtid_binlog_state && *gtid_binlog_state);
|
||||
|
||||
if (write_binlogs || gtid_exists) {
|
||||
if (gtid_exists) {
|
||||
size_t log_bin_dir_length;
|
||||
|
||||
lock_binlog_maybe(connection);
|
||||
|
||||
xb_mysql_query(connection, "FLUSH BINARY LOGS", false);
|
||||
|
||||
read_mysql_variables(connection, "SHOW MASTER STATUS",
|
||||
status_after_flush, false);
|
||||
|
||||
if (opt_log_bin != NULL && strchr(opt_log_bin, FN_LIBCHAR)) {
|
||||
/* If log_bin is set, it has priority */
|
||||
|
@ -1644,88 +1628,33 @@ write_current_binlog_file(MYSQL *connection, bool write_binlogs)
|
|||
log_bin_dir = strdup(opt_log_bin);
|
||||
} else if (log_bin_dir == NULL) {
|
||||
/* Default location is MySQL datadir */
|
||||
log_bin_dir = static_cast<char*>(malloc(3));
|
||||
ut_a(log_bin_dir);
|
||||
log_bin_dir[0] = '.';
|
||||
log_bin_dir[1] = FN_LIBCHAR;
|
||||
log_bin_dir[2] = 0;
|
||||
log_bin_dir = strdup("./");
|
||||
}
|
||||
|
||||
size_t log_bin_dir_length;
|
||||
|
||||
dirname_part(log_bin_dir, log_bin_dir, &log_bin_dir_length);
|
||||
|
||||
/* strip final slash if it is not the only path component */
|
||||
while (IS_TRAILING_SLASH(log_bin_dir, log_bin_dir_length)) {
|
||||
log_bin_dir_length--;
|
||||
if (log_bin_dir_length > 1 &&
|
||||
log_bin_dir[log_bin_dir_length - 1] == FN_LIBCHAR) {
|
||||
log_bin_dir[log_bin_dir_length - 1] = 0;
|
||||
}
|
||||
log_bin_dir[log_bin_dir_length] = 0;
|
||||
|
||||
if (log_bin_dir == NULL) {
|
||||
msg("Failed to locate binary log files");
|
||||
if (log_bin_dir == NULL || log_bin_file == NULL) {
|
||||
msg("Failed to get master binlog coordinates from "
|
||||
"SHOW MASTER STATUS");
|
||||
result = false;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
uint max_binlogs;
|
||||
max_binlogs = opt_max_binlogs;
|
||||
if (max_binlogs == 0) {
|
||||
if (gtid_exists) {
|
||||
max_binlogs = 1;
|
||||
} else {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
xb_mysql_query(connection, "FLUSH BINARY LOGS", false);
|
||||
|
||||
MYSQL_RES *mysql_result;
|
||||
|
||||
mysql_result = xb_mysql_query(connection, "SHOW BINARY LOGS", true);
|
||||
|
||||
ut_ad(mysql_num_fields(mysql_result) >= 2);
|
||||
|
||||
my_ulonglong n_rows;
|
||||
my_ulonglong start;
|
||||
|
||||
n_rows = mysql_num_rows(mysql_result);
|
||||
|
||||
start = 0;
|
||||
if (max_binlogs < n_rows) {
|
||||
start = n_rows - max_binlogs;
|
||||
}
|
||||
if (start) {
|
||||
mysql_data_seek(mysql_result, start);
|
||||
}
|
||||
|
||||
MYSQL_ROW row;
|
||||
while ((row = mysql_fetch_row(mysql_result))) {
|
||||
const char *binlog_name = row[0];
|
||||
char filepath[FN_REFLEN];
|
||||
snprintf(filepath, sizeof(filepath), "%s%c%s",
|
||||
log_bin_dir, FN_LIBCHAR, binlog_name);
|
||||
if (file_exists(filepath)) {
|
||||
result = copy_file(ds_data, filepath, binlog_name, 0);
|
||||
if (!result) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
write_binlog_info(connection, log_bin_dir,
|
||||
mysql_result, n_rows, start);
|
||||
}
|
||||
|
||||
mysql_free_result(mysql_result);
|
||||
snprintf(filepath, sizeof(filepath), "%s%c%s",
|
||||
log_bin_dir, FN_LIBCHAR, log_bin_file);
|
||||
result = copy_file(ds_data, filepath, log_bin_file, 0);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
free_mysql_variables(vars);
|
||||
|
||||
no_replication:
|
||||
free_mysql_variables(status_after_flush);
|
||||
free_mysql_variables(status);
|
||||
|
||||
binlog_disabled:
|
||||
free_mysql_variables(log_bin_var);
|
||||
free_mysql_variables(vars);
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
@ -1734,11 +1663,8 @@ binlog_disabled:
|
|||
/*********************************************************************//**
|
||||
Retrieves MySQL binlog position and
|
||||
saves it in a file. It also prints it to stdout. */
|
||||
static
|
||||
bool
|
||||
write_binlog_info(MYSQL *connection, char *log_bin_dir,
|
||||
MYSQL_RES *mysql_result, my_ulonglong n_rows,
|
||||
my_ulonglong start)
|
||||
write_binlog_info(MYSQL *connection)
|
||||
{
|
||||
char *filename = NULL;
|
||||
char *position = NULL;
|
||||
|
@ -1746,13 +1672,9 @@ write_binlog_info(MYSQL *connection, char *log_bin_dir,
|
|||
char *gtid_current_pos = NULL;
|
||||
char *gtid_executed = NULL;
|
||||
char *gtid = NULL;
|
||||
char *buffer;
|
||||
char *buf;
|
||||
size_t total;
|
||||
bool result = true;
|
||||
bool result;
|
||||
bool mysql_gtid;
|
||||
bool mariadb_gtid;
|
||||
bool with_gtid;
|
||||
|
||||
mysql_variable status[] = {
|
||||
{"File", &filename},
|
||||
|
@ -1770,106 +1692,39 @@ write_binlog_info(MYSQL *connection, char *log_bin_dir,
|
|||
read_mysql_variables(connection, "SHOW MASTER STATUS", status, false);
|
||||
read_mysql_variables(connection, "SHOW VARIABLES", vars, true);
|
||||
|
||||
mysql_gtid = gtid_mode && (strcmp(gtid_mode, "ON") == 0);
|
||||
mariadb_gtid = gtid_current_pos && *gtid_current_pos;
|
||||
if (filename == NULL || position == NULL) {
|
||||
/* Do not create xtrabackup_binlog_info if binary
|
||||
log is disabled */
|
||||
result = true;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
gtid = (gtid_executed && *gtid_executed) ? gtid_executed : gtid_current_pos;
|
||||
mysql_gtid = ((gtid_mode != NULL) && (strcmp(gtid_mode, "ON") == 0));
|
||||
mariadb_gtid = (gtid_current_pos != NULL);
|
||||
|
||||
with_gtid = mariadb_gtid || mysql_gtid;
|
||||
if (with_gtid) {
|
||||
gtid = (gtid_executed != NULL ? gtid_executed : gtid_current_pos);
|
||||
|
||||
if (mariadb_gtid || mysql_gtid) {
|
||||
ut_a(asprintf(&mysql_binlog_position,
|
||||
"filename '%s', position '%s', "
|
||||
"GTID of the last change '%s'",
|
||||
filename, position, gtid) != -1);
|
||||
result = backup_file_printf(XTRABACKUP_BINLOG_INFO,
|
||||
"%s\t%s\t%s\n", filename, position,
|
||||
gtid);
|
||||
} else {
|
||||
ut_a(asprintf(&mysql_binlog_position,
|
||||
"filename '%s', position '%s'",
|
||||
filename, position) != -1);
|
||||
result = backup_file_printf(XTRABACKUP_BINLOG_INFO,
|
||||
"%s\t%s\n", filename, position);
|
||||
}
|
||||
|
||||
mysql_data_seek(mysql_result, start);
|
||||
|
||||
MYSQL_ROW row;
|
||||
my_ulonglong current;
|
||||
|
||||
total = 1;
|
||||
current = start;
|
||||
while ((row = mysql_fetch_row(mysql_result))) {
|
||||
const char *binlog_name = row[0];
|
||||
/* The position in the current binlog is taken from
|
||||
the global variable, but for the previous ones it is
|
||||
determined by their length: */
|
||||
const char *binlog_pos =
|
||||
++current == n_rows ? position : row[1];
|
||||
total += strlen(binlog_name) + strlen(binlog_pos) + 2;
|
||||
if (with_gtid && current != n_rows) {
|
||||
/* Add the "\t[]" length to the buffer size: */
|
||||
total += 3;
|
||||
}
|
||||
}
|
||||
/* For the last of the binray log files, also add
|
||||
the length of the GTID (+ one character for '\t'): */
|
||||
if (with_gtid) {
|
||||
total += strlen(gtid) + 1;
|
||||
}
|
||||
|
||||
buffer = static_cast<char*>(malloc(total));
|
||||
if (!buffer) {
|
||||
msg("Failed to allocate memory for temporary buffer");
|
||||
result = false;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
mysql_data_seek(mysql_result, start);
|
||||
|
||||
buf = buffer;
|
||||
current = start;
|
||||
while ((row = mysql_fetch_row(mysql_result))) {
|
||||
const char *binlog_name = row[0];
|
||||
char filepath[FN_REFLEN];
|
||||
snprintf(filepath, sizeof(filepath), "%s%c%s",
|
||||
log_bin_dir, FN_LIBCHAR, binlog_name);
|
||||
current++;
|
||||
if (file_exists(filepath)) {
|
||||
/* The position in the current binlog is taken from
|
||||
the global variable, but for the previous ones it is
|
||||
determined by their length: */
|
||||
char *binlog_pos =
|
||||
current == n_rows ? position : row[1];
|
||||
int bytes;
|
||||
if (with_gtid) {
|
||||
bytes = snprintf(buf, total, "%s\t%s\t%s\n",
|
||||
binlog_name, binlog_pos,
|
||||
current == n_rows ? gtid : "[]");
|
||||
} else {
|
||||
bytes = snprintf(buf, total, "%s\t%s\n",
|
||||
binlog_name, binlog_pos);
|
||||
}
|
||||
if (bytes <= 0) {
|
||||
goto buffer_overflow;
|
||||
}
|
||||
buf += bytes;
|
||||
total -= bytes;
|
||||
}
|
||||
}
|
||||
|
||||
if (buf != buffer) {
|
||||
result = backup_file_printf(XTRABACKUP_BINLOG_INFO, "%s", buffer);
|
||||
}
|
||||
|
||||
cleanup2:
|
||||
free(buffer);
|
||||
|
||||
cleanup:
|
||||
free_mysql_variables(vars);
|
||||
free_mysql_variables(status);
|
||||
free_mysql_variables(vars);
|
||||
|
||||
return(result);
|
||||
|
||||
buffer_overflow:
|
||||
msg("Internal error: buffer overflow in the write_binlog_info()");
|
||||
result = false;
|
||||
goto cleanup2;
|
||||
}
|
||||
|
||||
struct escape_and_quote
|
||||
|
@ -2197,6 +2052,7 @@ backup_cleanup()
|
|||
{
|
||||
free(mysql_slave_position);
|
||||
free(mysql_binlog_position);
|
||||
free(buffer_pool_filename);
|
||||
|
||||
if (mysql_connection) {
|
||||
mysql_close(mysql_connection);
|
||||
|
|
|
@ -28,6 +28,7 @@ extern time_t history_lock_time;
|
|||
extern bool sql_thread_started;
|
||||
extern char *mysql_slave_position;
|
||||
extern char *mysql_binlog_position;
|
||||
extern char *buffer_pool_filename;
|
||||
|
||||
/** connection to mysql server */
|
||||
extern MYSQL *mysql_connection;
|
||||
|
@ -61,7 +62,10 @@ void
|
|||
unlock_all(MYSQL *connection);
|
||||
|
||||
bool
|
||||
write_current_binlog_file(MYSQL *connection, bool write_binlogs);
|
||||
write_current_binlog_file(MYSQL *connection);
|
||||
|
||||
bool
|
||||
write_binlog_info(MYSQL *connection);
|
||||
|
||||
bool
|
||||
write_xtrabackup_info(MYSQL *connection, const char * filename, bool history,
|
||||
|
|
|
@ -187,14 +187,4 @@ xb_read_full(File fd, uchar *buf, size_t len)
|
|||
return tlen;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#define IS_TRAILING_SLASH(name, length) \
|
||||
((length) > 1 && \
|
||||
(name[(length) - 1] == '/' || \
|
||||
name[(length) - 1] == '\\'))
|
||||
#else
|
||||
#define IS_TRAILING_SLASH(name, length) \
|
||||
((length) > 1 && name[(length) - 1] == FN_LIBCHAR)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -238,8 +238,7 @@ long innobase_read_io_threads = 4;
|
|||
long innobase_write_io_threads = 4;
|
||||
|
||||
longlong innobase_page_size = (1LL << 14); /* 16KB */
|
||||
char *innobase_buffer_pool_filename = NULL;
|
||||
char *buffer_pool_filename = NULL;
|
||||
char* innobase_buffer_pool_filename = NULL;
|
||||
|
||||
/* The default values for the following char* start-up parameters
|
||||
are determined in innobase_init below: */
|
||||
|
@ -348,7 +347,6 @@ uint opt_lock_wait_timeout = 0;
|
|||
uint opt_lock_wait_threshold = 0;
|
||||
uint opt_debug_sleep_before_unlock = 0;
|
||||
uint opt_safe_slave_backup_timeout = 0;
|
||||
uint opt_max_binlogs = UINT_MAX;
|
||||
|
||||
const char *opt_history = NULL;
|
||||
|
||||
|
@ -1049,8 +1047,7 @@ enum options_xtrabackup
|
|||
OPT_BACKUP_ROCKSDB,
|
||||
OPT_XTRA_CHECK_PRIVILEGES,
|
||||
OPT_XB_IGNORE_INNODB_PAGE_CORRUPTION,
|
||||
OPT_INNODB_FORCE_RECOVERY,
|
||||
OPT_MAX_BINLOGS
|
||||
OPT_INNODB_FORCE_RECOVERY
|
||||
};
|
||||
|
||||
struct my_option xb_client_options[]= {
|
||||
|
@ -1453,17 +1450,6 @@ struct my_option xb_client_options[]= {
|
|||
&opt_log_innodb_page_corruption, &opt_log_innodb_page_corruption, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
{"sst_max_binlogs", OPT_MAX_BINLOGS,
|
||||
"Number of recent binary logs to be included in the backup. "
|
||||
"Setting this parameter to zero normally disables transmission "
|
||||
"of binary logs to the joiner nodes during SST using Galera. "
|
||||
"But sometimes a single current binlog can still be transmitted "
|
||||
"to the joiner even with sst_max_binlogs=0, because it is "
|
||||
"required for Galera to work properly with GTIDs support.",
|
||||
(G_PTR *) &opt_max_binlogs,
|
||||
(G_PTR *) &opt_max_binlogs, 0, GET_UINT, OPT_ARG,
|
||||
UINT_MAX, 0, UINT_MAX, 0, 1, 0},
|
||||
|
||||
#define MYSQL_CLIENT
|
||||
#include "sslopt-longopts.h"
|
||||
#undef MYSQL_CLIENT
|
||||
|
@ -6222,44 +6208,6 @@ check_all_privileges()
|
|||
}
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
xb_init_buffer_pool(const char * filename)
|
||||
{
|
||||
if (filename &&
|
||||
#ifdef _WIN32
|
||||
(filename[0] == '/' ||
|
||||
filename[0] == '\\' ||
|
||||
strchr(filename, ':')))
|
||||
#else
|
||||
filename[0] == FN_LIBCHAR)
|
||||
#endif
|
||||
{
|
||||
buffer_pool_filename = strdup(filename);
|
||||
} else {
|
||||
char filepath[FN_REFLEN];
|
||||
char *dst_dir =
|
||||
(innobase_data_home_dir && *innobase_data_home_dir) ?
|
||||
innobase_data_home_dir : mysql_data_home;
|
||||
size_t dir_length;
|
||||
if (dst_dir && *dst_dir) {
|
||||
dir_length = strlen(dst_dir);
|
||||
while (IS_TRAILING_SLASH(dst_dir, dir_length)) {
|
||||
dir_length--;
|
||||
}
|
||||
memcpy(filepath, dst_dir, dir_length);
|
||||
}
|
||||
else {
|
||||
filepath[0] = '.';
|
||||
dir_length = 1;
|
||||
}
|
||||
snprintf(filepath + dir_length,
|
||||
sizeof(filepath) - dir_length, "%c%s", FN_LIBCHAR,
|
||||
filename ? filename : "ib_buffer_pool");
|
||||
buffer_pool_filename = strdup(filepath);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
xb_init()
|
||||
{
|
||||
|
@ -6324,15 +6272,11 @@ xb_init()
|
|||
if (!get_mysql_vars(mysql_connection)) {
|
||||
return(false);
|
||||
}
|
||||
xb_init_buffer_pool(buffer_pool_filename);
|
||||
|
||||
if (opt_check_privileges) {
|
||||
check_all_privileges();
|
||||
}
|
||||
history_start_time = time(NULL);
|
||||
|
||||
} else {
|
||||
xb_init_buffer_pool(innobase_buffer_pool_filename);
|
||||
}
|
||||
|
||||
return(true);
|
||||
|
@ -6626,8 +6570,6 @@ int main(int argc, char **argv)
|
|||
free_error_messages();
|
||||
mysql_mutex_destroy(&LOCK_error_log);
|
||||
|
||||
free(buffer_pool_filename);
|
||||
|
||||
if (status == EXIT_SUCCESS) {
|
||||
msg("completed OK!");
|
||||
}
|
||||
|
|
|
@ -70,7 +70,6 @@ extern char *xtrabackup_incremental_dir;
|
|||
extern char *xtrabackup_incremental_basedir;
|
||||
extern char *innobase_data_home_dir;
|
||||
extern char *innobase_buffer_pool_filename;
|
||||
extern char *buffer_pool_filename;
|
||||
extern char *xb_plugin_dir;
|
||||
extern char *xb_rocksdb_datadir;
|
||||
extern my_bool xb_backup_rocksdb;
|
||||
|
@ -166,7 +165,6 @@ extern uint opt_lock_wait_timeout;
|
|||
extern uint opt_lock_wait_threshold;
|
||||
extern uint opt_debug_sleep_before_unlock;
|
||||
extern uint opt_safe_slave_backup_timeout;
|
||||
extern uint opt_max_binlogs;
|
||||
|
||||
extern const char *opt_history;
|
||||
|
||||
|
|
|
@ -53,28 +53,7 @@ COUNT(*) = 2
|
|||
1
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
hostname1-bin.000001 # Gtid # # GTID #-#-#
|
||||
hostname1-bin.000001 # Query # # use `test`; CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB
|
||||
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t1 VALUES (1)
|
||||
hostname1-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
hostname1-bin.000001 # Xid # # COMMIT /* XID */
|
||||
hostname1-bin.000001 # Gtid # # GTID #-#-#
|
||||
hostname1-bin.000001 # Query # # use `test`; CREATE TABLE t2 (id INT) ENGINE=InnoDB
|
||||
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t2 VALUES (1)
|
||||
hostname1-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
hostname1-bin.000001 # Xid # # COMMIT /* XID */
|
||||
hostname1-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
hostname1-bin.000001 # Annotate_rows # # INSERT INTO t2 VALUES (1)
|
||||
hostname1-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
hostname1-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
hostname1-bin.000001 # Xid # # COMMIT /* XID */
|
||||
hostname1-bin.000001 # Gtid # # GTID #-#-#
|
||||
hostname1-bin.000001 # Query # # use `test`; ALTER TABLE t1 ADD COLUMN f2 INTEGER
|
||||
hostname1-bin.000001 # Rotate # # hostname1-bin.000002;pos=4
|
||||
hostname1-bin.000002 # Binlog_checkpoint # # hostname1-bin.000002
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
#cleanup
|
||||
|
|
|
@ -30,7 +30,6 @@ ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
|||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
--let $MASTER_MYPORT=$NODE_MYPORT_2
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -70,7 +70,6 @@ let $restart_noprint=2;
|
|||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
--let $MASTER_MYPORT=$NODE_MYPORT_2
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
Loading…
Add table
Reference in a new issue