summaryrefslogtreecommitdiffstats
path: root/extra/mariabackup
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 13:39:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 13:39:13 +0000
commit86fbb58c3ac0865482819c10a3e81f2eea001c36 (patch)
tree28c9e526ea739c6f9b89e36115e1e2698bddf981 /extra/mariabackup
parentReleasing progress-linux version 1:10.11.6-2~progress7.99u1. (diff)
downloadmariadb-86fbb58c3ac0865482819c10a3e81f2eea001c36.tar.xz
mariadb-86fbb58c3ac0865482819c10a3e81f2eea001c36.zip
Merging upstream version 1:10.11.7.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'extra/mariabackup')
-rw-r--r--extra/mariabackup/CMakeLists.txt2
-rw-r--r--extra/mariabackup/backup_copy.cc3
-rw-r--r--extra/mariabackup/backup_copy.h1
-rw-r--r--extra/mariabackup/backup_mysql.cc28
-rw-r--r--extra/mariabackup/fil_cur.cc2
-rw-r--r--extra/mariabackup/wsrep.cc10
-rw-r--r--extra/mariabackup/xtrabackup.cc85
-rw-r--r--extra/mariabackup/xtrabackup.h2
8 files changed, 108 insertions, 25 deletions
diff --git a/extra/mariabackup/CMakeLists.txt b/extra/mariabackup/CMakeLists.txt
index 66293dac..f1c9dca7 100644
--- a/extra/mariabackup/CMakeLists.txt
+++ b/extra/mariabackup/CMakeLists.txt
@@ -36,7 +36,7 @@ INCLUDE_DIRECTORIES(
)
IF(NOT HAVE_SYSTEM_REGEX)
- INCLUDE_DIRECTORIES(${PCRE_INCLUDES})
+ INCLUDE_DIRECTORIES(${PCRE_INCLUDE_DIRS})
ADD_DEFINITIONS(${PCRE2_DEBIAN_HACK})
ENDIF()
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc
index dbf12ced..f8d315d9 100644
--- a/extra/mariabackup/backup_copy.cc
+++ b/extra/mariabackup/backup_copy.cc
@@ -1618,6 +1618,7 @@ ibx_copy_incremental_over_full()
NULL};
const char *sup_files[] = {"xtrabackup_binlog_info",
"xtrabackup_galera_info",
+ "donor_galera_info",
"xtrabackup_slave_info",
"xtrabackup_info",
"ib_lru_dump",
@@ -2290,7 +2291,7 @@ ds_ctxt_t::make_hardlink(const char *from_path, const char *to_path)
}
else
{
- strncpy(to_path_full, to_path, sizeof(to_path_full));
+ strncpy(to_path_full, to_path, sizeof(to_path_full)-1);
}
#ifdef _WIN32
return CreateHardLink(to_path_full, from_path, NULL);
diff --git a/extra/mariabackup/backup_copy.h b/extra/mariabackup/backup_copy.h
index b4a323f2..b5aaf312 100644
--- a/extra/mariabackup/backup_copy.h
+++ b/extra/mariabackup/backup_copy.h
@@ -9,6 +9,7 @@
/* special files */
#define XTRABACKUP_SLAVE_INFO "xtrabackup_slave_info"
#define XTRABACKUP_GALERA_INFO "xtrabackup_galera_info"
+#define XTRABACKUP_DONOR_GALERA_INFO "donor_galera_info"
#define XTRABACKUP_BINLOG_INFO "xtrabackup_binlog_info"
#define XTRABACKUP_INFO "xtrabackup_info"
diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc
index cf8a5051..c2f15da4 100644
--- a/extra/mariabackup/backup_mysql.cc
+++ b/extra/mariabackup/backup_mysql.cc
@@ -1360,6 +1360,7 @@ write_galera_info(ds_ctxt *datasink, MYSQL *connection)
{
char *state_uuid = NULL, *state_uuid55 = NULL;
char *last_committed = NULL, *last_committed55 = NULL;
+ char *domain_id = NULL, *domain_id55 = NULL;
bool result;
mysql_variable status[] = {
@@ -1370,6 +1371,12 @@ write_galera_info(ds_ctxt *datasink, MYSQL *connection)
{NULL, NULL}
};
+ mysql_variable value[] = {
+ {"Wsrep_gtid_domain_id", &domain_id},
+ {"wsrep_gtid_domain_id", &domain_id55},
+ {NULL, NULL}
+ };
+
/* When backup locks are supported by the server, we should skip
creating xtrabackup_galera_info file on the backup stage, because
wsrep_local_state_uuid and wsrep_last_committed will be inconsistent
@@ -1388,9 +1395,26 @@ write_galera_info(ds_ctxt *datasink, MYSQL *connection)
goto cleanup;
}
+ read_mysql_variables(connection, "SHOW VARIABLES LIKE 'wsrep%'", value, true);
+
+ if (domain_id == NULL && domain_id55 == NULL) {
+ msg("Warning: failed to get master wsrep state from SHOW VARIABLES.");
+ result = true;
+ goto cleanup;
+ }
+
result = datasink->backup_file_printf(XTRABACKUP_GALERA_INFO,
- "%s:%s\n", state_uuid ? state_uuid : state_uuid55,
- last_committed ? last_committed : last_committed55);
+ "%s:%s %s\n", state_uuid ? state_uuid : state_uuid55,
+ last_committed ? last_committed : last_committed55,
+ domain_id ? domain_id : domain_id55);
+
+ if (result)
+ {
+ result= datasink->backup_file_printf(XTRABACKUP_DONOR_GALERA_INFO,
+ "%s:%s %s\n", state_uuid ? state_uuid : state_uuid55,
+ last_committed ? last_committed : last_committed55,
+ domain_id ? domain_id : domain_id55);
+ }
if (result)
{
write_current_binlog_file(datasink, connection);
diff --git a/extra/mariabackup/fil_cur.cc b/extra/mariabackup/fil_cur.cc
index e0a4711a..4f5d67a5 100644
--- a/extra/mariabackup/fil_cur.cc
+++ b/extra/mariabackup/fil_cur.cc
@@ -199,11 +199,13 @@ xb_fil_cur_open(
return(XB_FIL_CUR_SKIP);
}
+#ifdef HAVE_FCNTL_DIRECT
if (srv_file_flush_method == SRV_O_DIRECT
|| srv_file_flush_method == SRV_O_DIRECT_NO_FSYNC) {
os_file_set_nocache(cursor->file, node->name, "OPEN");
}
+#endif
posix_fadvise(cursor->file, 0, 0, POSIX_FADV_SEQUENTIAL);
diff --git a/extra/mariabackup/wsrep.cc b/extra/mariabackup/wsrep.cc
index 1b93e9ed..acaf5c50 100644
--- a/extra/mariabackup/wsrep.cc
+++ b/extra/mariabackup/wsrep.cc
@@ -53,6 +53,7 @@ permission notice:
/*! Name of file where Galera info is stored on recovery */
#define XB_GALERA_INFO_FILENAME "xtrabackup_galera_info"
+#define XB_GALERA_DONOR_INFO_FILENAME "donor_galera_info"
/***********************************************************************
Store Galera checkpoint info in the 'xtrabackup_galera_info' file, if that
@@ -67,7 +68,7 @@ xb_write_galera_info(bool incremental_prepare)
long long seqno;
MY_STAT statinfo;
- /* Do not overwrite existing an existing file to be compatible with
+ /* Do not overwrite an existing file to be compatible with
servers with older server versions */
if (!incremental_prepare &&
my_stat(XB_GALERA_INFO_FILENAME, &statinfo, MYF(0)) != NULL) {
@@ -101,10 +102,11 @@ xb_write_galera_info(bool incremental_prepare)
seqno = wsrep_xid_seqno(&xid);
- msg("mariabackup: Recovered WSREP position: %s:%lld\n",
- uuid_str, (long long) seqno);
+ msg("mariabackup: Recovered WSREP position: %s:%lld domain_id: %lld\n",
+ uuid_str, (long long) seqno, (long long)wsrep_get_domain_id());
- if (fprintf(fp, "%s:%lld", uuid_str, (long long) seqno) < 0) {
+ if (fprintf(fp, "%s:%lld %lld", uuid_str, (long long) seqno,
+ (long long)wsrep_get_domain_id()) < 0) {
die(
"could not write to " XB_GALERA_INFO_FILENAME
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 9e359257..485cb143 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -127,7 +127,8 @@ int sd_notifyf() { return 0; }
int sys_var_init();
/* === xtrabackup specific options === */
-char xtrabackup_real_target_dir[FN_REFLEN] = "./xtrabackup_backupfiles/";
+#define DEFAULT_TARGET_DIR "./xtrabackup_backupfiles/"
+char xtrabackup_real_target_dir[FN_REFLEN] = DEFAULT_TARGET_DIR;
char *xtrabackup_target_dir= xtrabackup_real_target_dir;
static my_bool xtrabackup_version;
static my_bool verbose;
@@ -409,6 +410,9 @@ uint opt_safe_slave_backup_timeout = 0;
const char *opt_history = NULL;
+/* Whether xtrabackup_binlog_info should be created on recovery */
+static bool recover_binlog_info;
+
char mariabackup_exe[FN_REFLEN];
char orig_argv1[FN_REFLEN];
@@ -1266,22 +1270,25 @@ struct my_option xb_client_options[]= {
{"compress", OPT_XTRA_COMPRESS,
"Compress individual backup files using the "
- "specified compression algorithm. Currently the only supported algorithm "
- "is 'quicklz'. It is also the default algorithm, i.e. the one used when "
- "--compress is used without an argument.",
+ "specified compression algorithm. It uses no longer maintained QuickLZ "
+ "library hence this option was deprecated with MariaDB 10.1.31 and 10.2.13.",
(G_PTR *) &xtrabackup_compress_alg, (G_PTR *) &xtrabackup_compress_alg, 0,
GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"compress-threads", OPT_XTRA_COMPRESS_THREADS,
"Number of threads for parallel data compression. The default value is "
- "1.",
+ "1. "
+ "This option was deprecated as it relies on the no longer "
+ "maintained QuickLZ library.",
(G_PTR *) &xtrabackup_compress_threads,
(G_PTR *) &xtrabackup_compress_threads, 0, GET_UINT, REQUIRED_ARG, 1, 1,
UINT_MAX, 0, 0, 0},
{"compress-chunk-size", OPT_XTRA_COMPRESS_CHUNK_SIZE,
"Size of working buffer(s) for compression threads in bytes. The default "
- "value is 64K.",
+ "value is 64K. "
+ "This option was deprecated as it relies on the no longer "
+ "maintained QuickLZ library.",
(G_PTR *) &xtrabackup_compress_chunk_size,
(G_PTR *) &xtrabackup_compress_chunk_size, 0, GET_ULL, REQUIRED_ARG,
(1 << 16), 1024, ULONGLONG_MAX, 0, 0, 0},
@@ -1402,7 +1409,9 @@ struct my_option xb_client_options[]= {
{"decompress", OPT_DECOMPRESS,
"Decompresses all files with the .qp "
- "extension in a backup previously made with the --compress option.",
+ "extension in a backup previously made with the --compress option. "
+ "This option was deprecated as it relies on the no longer "
+ "maintained QuickLZ library.",
(uchar *) &opt_decompress, (uchar *) &opt_decompress, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0, 0, 0},
@@ -1686,8 +1695,11 @@ struct my_option xb_server_options[] =
"Path to InnoDB log files.", &srv_log_group_home_dir,
&srv_log_group_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
- "Percentage of dirty pages allowed in bufferpool.", (G_PTR*) &srv_max_buf_pool_modified_pct,
- (G_PTR*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
+ "Percentage of dirty pages allowed in bufferpool.",
+ (G_PTR*) &srv_max_buf_pool_modified_pct,
+ (G_PTR*) &srv_max_buf_pool_modified_pct, 0, GET_DOUBLE, REQUIRED_ARG,
+ (longlong)getopt_double2ulonglong(90), (longlong)getopt_double2ulonglong(0),
+ getopt_double2ulonglong(100), 0, 0, 0},
{"innodb_use_native_aio", OPT_INNODB_USE_NATIVE_AIO,
"Use native AIO if supported on this platform.",
(G_PTR*) &srv_use_native_aio,
@@ -2179,7 +2191,7 @@ static bool innodb_init_param()
/* Check that values don't overflow on 32-bit systems. */
if (sizeof(ulint) == 4) {
- if (xtrabackup_use_memory > UINT_MAX32) {
+ if (xtrabackup_use_memory > (longlong) UINT_MAX32) {
msg("mariabackup: use-memory can't be over 4GB"
" on 32-bit systems");
}
@@ -2458,6 +2470,7 @@ xtrabackup_read_metadata(char *filename)
{
FILE *fp;
my_bool r = TRUE;
+ int t;
fp = fopen(filename,"r");
if(!fp) {
@@ -2488,6 +2501,9 @@ xtrabackup_read_metadata(char *filename)
}
/* Optional fields */
+ if (fscanf(fp, "recover_binlog_info = %d\n", &t) == 1) {
+ recover_binlog_info = (t == 1);
+ }
end:
fclose(fp);
@@ -2506,11 +2522,13 @@ xtrabackup_print_metadata(char *buf, size_t buf_len)
"backup_type = %s\n"
"from_lsn = " UINT64PF "\n"
"to_lsn = " UINT64PF "\n"
- "last_lsn = " UINT64PF "\n",
+ "last_lsn = " UINT64PF "\n"
+ "recover_binlog_info = %d\n",
metadata_type,
metadata_from_lsn,
metadata_to_lsn,
- metadata_last_lsn);
+ metadata_last_lsn,
+ MY_TEST(opt_binlog_info == BINLOG_INFO_LOCKLESS));
}
/***********************************************************************
@@ -5942,6 +5960,26 @@ static ibool prepare_handle_del_files(const char *datadir, const char *db, const
return TRUE;
}
+
+/**************************************************************************
+Store the current binary log coordinates in a specified file.
+@return 'false' on error. */
+static bool
+store_binlog_info(const char *filename, const char* name, ulonglong pos)
+{
+ FILE *fp = fopen(filename, "w");
+
+ if (!fp) {
+ msg("mariabackup: failed to open '%s'\n", filename);
+ return(false);
+ }
+
+ fprintf(fp, "%s\t%llu\n", name, pos);
+ fclose(fp);
+
+ return(true);
+}
+
/** Implement --prepare
@return whether the operation succeeded */
static bool xtrabackup_prepare_func(char** argv)
@@ -6133,6 +6171,20 @@ error:
msg("Last binlog file %s, position %lld",
trx_sys.recovered_binlog_filename,
longlong(trx_sys.recovered_binlog_offset));
+
+ /* output to xtrabackup_binlog_pos_innodb and (if
+ backup_safe_binlog_info was available on the server) to
+ xtrabackup_binlog_info. In the latter case
+ xtrabackup_binlog_pos_innodb becomes redundant and is created
+ only for compatibility. */
+ ok = store_binlog_info(
+ "xtrabackup_binlog_pos_innodb",
+ trx_sys.recovered_binlog_filename,
+ trx_sys.recovered_binlog_offset)
+ && (!recover_binlog_info || store_binlog_info(
+ XTRABACKUP_BINLOG_INFO,
+ trx_sys.recovered_binlog_filename,
+ trx_sys.recovered_binlog_offset));
}
/* Check whether the log is applied enough or not. */
@@ -6334,7 +6386,7 @@ static bool check_all_privileges()
}
/* KILL ... */
- if (!opt_no_lock && (opt_kill_long_queries_timeout || opt_kill_long_query_type)) {
+ if (!opt_no_lock && opt_kill_long_queries_timeout) {
check_result |= check_privilege(
granted_privileges,
"CONNECTION ADMIN", "*", "*",
@@ -6355,7 +6407,7 @@ static bool check_all_privileges()
if (opt_galera_info || opt_slave_info
|| opt_safe_slave_backup) {
check_result |= check_privilege(granted_privileges,
- "SLAVE MONITOR", "*", "*",
+ "REPLICA MONITOR", "*", "*",
PRIVILEGE_WARNING);
}
@@ -6568,9 +6620,10 @@ void handle_options(int argc, char **argv, char ***argv_server,
server_default_groups.push_back(NULL);
snprintf(conf_file, sizeof(conf_file), "my");
- if (prepare && target_dir) {
+ if (prepare) {
snprintf(conf_file, sizeof(conf_file),
- "%s/backup-my.cnf", target_dir);
+ "%s/backup-my.cnf", target_dir ? target_dir:
+ DEFAULT_TARGET_DIR);
if (!strncmp(argv[1], "--defaults-file=", 16)) {
/* Remove defaults-file*/
for (int i = 2; ; i++) {
diff --git a/extra/mariabackup/xtrabackup.h b/extra/mariabackup/xtrabackup.h
index 53784a3f..d091c474 100644
--- a/extra/mariabackup/xtrabackup.h
+++ b/extra/mariabackup/xtrabackup.h
@@ -171,7 +171,7 @@ extern uint opt_safe_slave_backup_timeout;
extern const char *opt_history;
-enum binlog_info_enum { BINLOG_INFO_OFF, BINLOG_INFO_ON,
+enum binlog_info_enum { BINLOG_INFO_OFF, BINLOG_INFO_LOCKLESS, BINLOG_INFO_ON,
BINLOG_INFO_AUTO};
extern ulong opt_binlog_info;