MDEV-18855 Mariabackup should fetch innodb_compression_level from running server

- Fetch innodb_compression_level from the running server.Add the value
of innodb_compression_level in backup-my.cnf file during backup phase.
So that prepare can use the innodb_compression_level variable from
backup-my.cnf
parent e3adf96a
......@@ -54,7 +54,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include "mysqld.h"
#include "encryption_plugin.h"
#include <sstream>
#include "page0zip.h"
char *tool_name;
char tool_args[2048];
......@@ -350,6 +350,7 @@ get_mysql_vars(MYSQL *connection)
char *innodb_undo_directory_var = NULL;
char *innodb_page_size_var = NULL;
char *innodb_undo_tablespaces_var = NULL;
char *page_zip_level_var = NULL;
char *endptr;
unsigned long server_version = mysql_get_server_version(connection);
......@@ -379,6 +380,7 @@ get_mysql_vars(MYSQL *connection)
{"innodb_undo_directory", &innodb_undo_directory_var},
{"innodb_page_size", &innodb_page_size_var},
{"innodb_undo_tablespaces", &innodb_undo_tablespaces_var},
{"innodb_compression_level", &page_zip_level_var},
{NULL, NULL}
};
......@@ -512,7 +514,13 @@ get_mysql_vars(MYSQL *connection)
}
if (innodb_undo_tablespaces_var) {
srv_undo_tablespaces = strtoul(innodb_undo_tablespaces_var, &endptr, 10);
srv_undo_tablespaces = strtoul(innodb_undo_tablespaces_var,
&endptr, 10);
ut_ad(*endptr == 0);
}
if (page_zip_level_var != NULL) {
page_zip_level = strtoul(page_zip_level_var, &endptr, 10);
ut_ad(*endptr == 0);
}
......@@ -1574,6 +1582,7 @@ bool write_backup_config_file()
"innodb_log_block_size=%lu\n"
"innodb_undo_directory=%s\n"
"innodb_undo_tablespaces=%lu\n"
"innodb_compression_level=%u\n"
"%s%s\n"
"%s%s\n"
"%s\n",
......@@ -1586,6 +1595,7 @@ bool write_backup_config_file()
srv_log_block_size,
srv_undo_dir,
srv_undo_tablespaces,
page_zip_level,
innobase_doublewrite_file ? "innodb_doublewrite_file=" : "",
innobase_doublewrite_file ? innobase_doublewrite_file : "",
innobase_buffer_pool_filename ?
......
......@@ -597,7 +597,8 @@ enum options_xtrabackup
OPT_XTRA_TABLES_EXCLUDE,
OPT_XTRA_DATABASES_EXCLUDE,
OPT_PROTOCOL
OPT_PROTOCOL,
OPT_INNODB_COMPRESSION_LEVEL
};
struct my_option xb_client_options[] =
......@@ -1145,6 +1146,11 @@ Disable with --skip-innodb-doublewrite.", (G_PTR*) &innobase_use_doublewrite,
(G_PTR*)&srv_undo_tablespaces, (G_PTR*)&srv_undo_tablespaces,
0, GET_ULONG, REQUIRED_ARG, 0, 0, 126, 0, 1, 0},
{"innodb_compression_level", OPT_INNODB_COMPRESSION_LEVEL,
"Compression level used for zlib compression.",
(G_PTR*)&page_zip_level, (G_PTR*)&page_zip_level,
0, GET_UINT, REQUIRED_ARG, 6, 0, 9, 0, 0, 0},
{"defaults_group", OPT_DEFAULTS_GROUP, "defaults group in config file (default \"mysqld\").",
(G_PTR*) &defaults_group, (G_PTR*) &defaults_group,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
......@@ -1381,6 +1387,10 @@ xb_get_one_option(int optid,
ADD_PRINT_PARAM_OPT(innodb_checksum_algorithm_names[srv_log_checksum_algorithm]);
break;
case OPT_INNODB_COMPRESSION_LEVEL:
ADD_PRINT_PARAM_OPT(page_zip_level);
break;
case OPT_INNODB_BUFFER_POOL_FILENAME:
ADD_PRINT_PARAM_OPT(innobase_buffer_pool_filename);
......
set global innodb_compression_level = 3;
CREATE TABLE t1(c1 INT, b CHAR(20)) ENGINE=INNODB PAGE_COMPRESSED=1;
INSERT INTO t1 VALUES(1, 'mariadb');
# xtrabackup backup
# xtrabackup prepare
FOUND /innodb_compression_level=3/ in backup-my.cnf
DELETE FROM t1;
ALTER TABLE t1 DISCARD TABLESPACE;
ALTER TABLE t1 IMPORT TABLESPACE;
SELECT * FROM t1;
c1 b
1 mariadb
DROP TABLE t1;
set global innodb_compression_level = default;
#--source include/innodb_page_size.inc
set global innodb_compression_level = 3;
CREATE TABLE t1(c1 INT, b CHAR(20)) ENGINE=INNODB PAGE_COMPRESSED=1;
INSERT INTO t1 VALUES(1, 'mariadb');
echo # xtrabackup backup;
let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
--disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir;
echo # xtrabackup prepare;
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group-suffix=.1 --prepare --export --target-dir=$targetdir;
--enable_result_log
--let SEARCH_PATTERN=innodb_compression_level=3
--let SEARCH_FILE=$targetdir/backup-my.cnf
--source include/search_pattern_in_file.inc
DELETE FROM t1;
ALTER TABLE t1 DISCARD TABLESPACE;
let $MYSQLD_DATADIR= `select @@datadir`;
copy_file $targetdir/test/t1.ibd $MYSQLD_DATADIR/test/t1.ibd;
copy_file $targetdir/test/t1.cfg $MYSQLD_DATADIR/test/t1.cfg;
ALTER TABLE t1 IMPORT TABLESPACE;
SELECT * FROM t1;
DROP TABLE t1;
set global innodb_compression_level = default;
rmdir $targetdir;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment