diff options
author | Sergei Golubchik <serg@mariadb.org> | 2021-10-11 14:53:11 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2021-10-27 15:55:14 +0200 |
commit | 8c806c41520130222b2af34031e58d6a9d50c46a (patch) | |
tree | 34810d63b3682bedc91d8cb650a5cbba2235e2df | |
parent | 5a330d4cce206386a61c12af1ef9c27f0b2ca16d (diff) | |
download | mariadb-git-8c806c41520130222b2af34031e58d6a9d50c46a.tar.gz |
MDEV-26794 MariaBackup does not recognize added providers upon prepare of incremental backup
prefer backup-my.cnf from the incremental-dir over the one in target-dir
-rw-r--r-- | extra/mariabackup/encryption_plugin.cc | 11 | ||||
-rw-r--r-- | extra/mariabackup/encryption_plugin.h | 2 | ||||
-rw-r--r-- | extra/mariabackup/xtrabackup.cc | 11 | ||||
-rw-r--r-- | mysql-test/suite/mariabackup/incremental_compressed.result | 13 | ||||
-rw-r--r-- | mysql-test/suite/mariabackup/incremental_compressed.test | 38 |
5 files changed, 66 insertions, 9 deletions
diff --git a/extra/mariabackup/encryption_plugin.cc b/extra/mariabackup/encryption_plugin.cc index 4e5aa8f157b..16bc92ca4f2 100644 --- a/extra/mariabackup/encryption_plugin.cc +++ b/extra/mariabackup/encryption_plugin.cc @@ -55,12 +55,13 @@ static char XTRABACKUP_EXE[] = "xtrabackup"; Read "plugin-load" value from backup-my.cnf during prepare phase. The value is stored during backup phase. */ -static std::string get_encryption_plugin_from_cnf() +static std::string get_encryption_plugin_from_cnf(const char *dir) { - FILE *f = fopen("backup-my.cnf", "r"); + std::string path = dir + std::string("/backup-my.cnf"); + FILE *f = fopen(path.c_str(), "r"); if (!f) { - die("Can't open backup-my.cnf for reading"); + die("Can't open %s for reading", path.c_str()); } char line[512]; std::string plugin_load; @@ -185,9 +186,9 @@ const char *encryption_plugin_get_config() extern int finalize_encryption_plugin(st_plugin_int *plugin); -void encryption_plugin_prepare_init(int argc, char **argv) +void encryption_plugin_prepare_init(int argc, char **argv, const char *dir) { - std::string plugin_load= get_encryption_plugin_from_cnf(); + std::string plugin_load= get_encryption_plugin_from_cnf(dir ? dir : "."); if (plugin_load.size()) { msg("Loading plugins from %s", plugin_load.c_str()); diff --git a/extra/mariabackup/encryption_plugin.h b/extra/mariabackup/encryption_plugin.h index 16d74790254..496437caa29 100644 --- a/extra/mariabackup/encryption_plugin.h +++ b/extra/mariabackup/encryption_plugin.h @@ -2,6 +2,6 @@ #include <string> extern void encryption_plugin_backup_init(MYSQL *mysql); extern const char* encryption_plugin_get_config(); -extern void encryption_plugin_prepare_init(int argc, char **argv); +extern void encryption_plugin_prepare_init(int argc, char **argv, const char *dir); //extern void encryption_plugin_init(int argc, char **argv); diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index 0726c61666c..be513486583 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -5774,7 +5774,7 @@ static bool xtrabackup_prepare_func(char** argv) } int argc; for (argc = 0; argv[argc]; argc++) {} - encryption_plugin_prepare_init(argc, argv); + encryption_plugin_prepare_init(argc, argv, xtrabackup_incremental_dir); xtrabackup_target_dir= mysql_data_home_buff; xtrabackup_target_dir[0]=FN_CURLIB; // all paths are relative from here @@ -6332,12 +6332,17 @@ void handle_options(int argc, char **argv, char ***argv_server, { prepare= true; } - else if (!strncmp(argv[i], "--target-dir", optend - argv[i]) && + else if (!strncmp(argv[i], "--incremental-dir", optend - argv[i]) && *optend) { target_dir= optend + 1; } - else if (!*optend && argv[i][0] != '-') + else if (!strncmp(argv[i], "--target-dir", optend - argv[i]) && + *optend && !target_dir) + { + target_dir= optend + 1; + } + else if (!*optend && argv[i][0] != '-' && !target_dir) { target_dir= argv[i]; } diff --git a/mysql-test/suite/mariabackup/incremental_compressed.result b/mysql-test/suite/mariabackup/incremental_compressed.result new file mode 100644 index 00000000000..eb059cdc769 --- /dev/null +++ b/mysql-test/suite/mariabackup/incremental_compressed.result @@ -0,0 +1,13 @@ +# +# MDEV-26794 MariaBackup does not recognize added providers upon prepare of incremental backup +# +CREATE TABLE t (a INT) ENGINE=InnoDB; +INSERT INTO t VALUES (1),(2); +INSTALL SONAME 'provider_snappy'; +SET GLOBAL innodb_compression_algorithm= snappy; +CREATE TABLE t_snappy (a INT) ENGINE=InnoDB page_compressed=1; +INSERT INTO t_snappy VALUES (3),(4); +# restart: --innodb_buffer_pool_load_at_startup=0 +# Prepare initial backup +# Prepare incremental backup +DROP TABLE t; diff --git a/mysql-test/suite/mariabackup/incremental_compressed.test b/mysql-test/suite/mariabackup/incremental_compressed.test new file mode 100644 index 00000000000..f6ec26cfb46 --- /dev/null +++ b/mysql-test/suite/mariabackup/incremental_compressed.test @@ -0,0 +1,38 @@ +--echo # +--echo # MDEV-26794 MariaBackup does not recognize added providers upon prepare of incremental backup +--echo # + +if (!$PROVIDER_SNAPPY_SO) { + skip "Needs provider_snappy plugin"; +} + +--source include/have_innodb.inc + +--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup +--let $incdir=$MYSQLTEST_VARDIR/tmp/inc + +CREATE TABLE t (a INT) ENGINE=InnoDB; +INSERT INTO t VALUES (1),(2); + +--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir + +INSTALL SONAME 'provider_snappy'; + +SET GLOBAL innodb_compression_algorithm= snappy; + +CREATE TABLE t_snappy (a INT) ENGINE=InnoDB page_compressed=1; +INSERT INTO t_snappy VALUES (3),(4); + +# disable buffer pool load to avoid MDEV-26794 warnings +--let $restart_parameters= --innodb_buffer_pool_load_at_startup=0 +--source include/restart_mysqld.inc + +--exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --incremental-basedir=$targetdir --target-dir=$incdir + +--echo # Prepare initial backup +--exec $XTRABACKUP --prepare --target-dir=$targetdir + +--echo # Prepare incremental backup +--exec $XTRABACKUP --prepare --target-dir=$targetdir --incremental-dir=$incdir > $MYSQLTEST_VARDIR/prepare.log 2>&1 + +DROP TABLE t; |