Commit 4901f31c authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.2 into 10.3

parents c3a80175 59950df5
......@@ -51,6 +51,36 @@ static void add_to_plugin_load_list(const char *plugin_def)
static char XTRABACKUP_EXE[] = "xtrabackup";
/*
Read "plugin-load" value (encryption plugin) from backup-my.cnf during
prepare phase.
The value is stored during backup phase.
*/
static std::string get_encryption_plugin_from_cnf()
{
FILE *f = fopen("backup-my.cnf", "r");
if (!f)
{
msg("cannot open backup-my.cnf for reading\n");
exit(EXIT_FAILURE);
}
char line[512];
std::string plugin_load;
while (fgets(line, sizeof(line), f))
{
if (strncmp(line, "plugin_load=", 12) == 0)
{
plugin_load = line + 12;
// remote \n at the end of string
plugin_load.resize(plugin_load.size() - 1);
break;
}
}
fclose(f);
return plugin_load;
}
void encryption_plugin_backup_init(MYSQL *mysql)
{
MYSQL_RES *result;
......@@ -78,7 +108,17 @@ void encryption_plugin_backup_init(MYSQL *mysql)
std::string plugin_load(name);
if (library)
{
/* Remove shared library suffixes, in case we'll prepare on different OS.*/
const char *extensions[] = { ".dll", ".so", 0 };
for (size_t i = 0; extensions[i]; i++)
{
const char *ext = extensions[i];
if (ends_with(library, ext))
library[strlen(library) - strlen(ext)] = 0;
}
plugin_load += std::string("=") + library;
}
oss << "plugin_load=" << plugin_load << std::endl;
......@@ -140,14 +180,18 @@ extern int finalize_encryption_plugin(st_plugin_int *plugin);
void encryption_plugin_prepare_init(int argc, char **argv)
{
if (!xb_plugin_load)
std::string plugin_load= get_encryption_plugin_from_cnf();
if (plugin_load.size())
{
msg("Loading encryption plugin from %s\n", plugin_load.c_str());
}
else
{
finalize_encryption_plugin(0);
return;
}
add_to_plugin_load_list(xb_plugin_load);
add_to_plugin_load_list(plugin_load.c_str());
if (xb_plugin_dir)
strncpy(opt_plugin_dir, xb_plugin_dir, FN_REFLEN);
......
......@@ -709,7 +709,6 @@ enum options_xtrabackup
OPT_INNODB_LOG_CHECKSUMS,
OPT_XTRA_INCREMENTAL_FORCE_SCAN,
OPT_DEFAULTS_GROUP,
OPT_PLUGIN_LOAD,
OPT_INNODB_ENCRYPT_LOG,
OPT_CLOSE_FILES,
OPT_CORE_FILE,
......@@ -1268,11 +1267,7 @@ struct my_option xb_server_options[] =
&xb_plugin_dir, &xb_plugin_dir,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ "plugin-load", OPT_PLUGIN_LOAD, "encrypton plugin to load during 'prepare' phase.",
&xb_plugin_load, &xb_plugin_load,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ "innodb-encrypt-log", OPT_INNODB_ENCRYPT_LOG, "encrypton plugin to load",
{ "innodb-encrypt-log", OPT_INNODB_ENCRYPT_LOG, "Whether to encrypt innodb log",
&srv_encrypt_log, &srv_encrypt_log,
0, GET_BOOL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
......
main.1st
main.adddate_454
main.almost_full
main.alter_table_autoinc-5574
main.alter_table_errors
main.alter_table_mdev539_maria
main.alter_table_mdev539_myisam
main.alter_table_online
main.alter_table_trans
main.analyze
main.analyze_stmt
main.analyze_stmt_orderby
main.analyze_stmt_slow_query_log
main.ansi
main.assign_key_cache
main.auth_rpl
main.auto_increment
main.auto_increment_ranges_innodb
main.auto_increment_ranges_myisam
main.bad_frm_crash_5029
main.bench_count_distinct
main.bigint
main.binary
main.binary_to_hex
main.blackhole
main.blackhole_plugin
main.bool
main.bootstrap
main.bug12427262
main.bug13633383
main.bug46760
main.bug47671
main.bulk_replace
main.case
main.change_user
main.check_constraint_show
main.client_xml
main.comment_column
main.comment_column2
main.comment_index
main.comments
main.comment_table
main.commit_1innodb
main.compare
main.compound
main.contributors
main.count_distinct
main.count_distinct2
main.create_drop_db
main.create_drop_event
main.create_drop_function
main.create_drop_index
main.create_drop_procedure
main.create_drop_server
main.create_drop_trigger
main.create_drop_user
main.create_drop_view
main.create_not_windows
main.create_select_tmp
main.create-uca
main.create_user
main.create_w_max_indexes_64
main.ctype_ascii
main.ctype_big5
main.ctype_binary
main.ctype_collate
main.ctype_cp1250_ch
main.ctype_cp1251
main.ctype_cp850
main.ctype_cp932
main.ctype_cp932_binlog_row
main.ctype_cp932_binlog_stm
main.ctype_create
main.ctype_eucjpms
main.ctype_euckr
main.ctype_filename
main.ctype_filesystem
main.ctype_gb2312
main.ctype_gbk
main.ctype_gbk_binlog
main.ctype_gbk_export_import
main.ctype_hebrew
main.ctype_latin1
main.ctype_latin1_de
main.ctype_latin2
main.ctype_latin2_ch
main.ctype_ldml
main.ctype_many
main.ctype_mb
main.ctype_nopad_8bit
main.ctype_partitions
main.ctype_recoding
main.ctype_sjis
main.ctype_swe7
main.ctype_tis620
main.ctype_uca
main.ctype_uca_innodb
main.ctype_uca_partitions
main.ctype_ucs
main.ctype_ucs2_def
main.ctype_ucs2_query_cache
main.ctype_ucs2_uca
main.ctype_ujis
main.ctype_ujis_ucs2
main.ctype_upgrade
main.ctype_utf16
main.ctype_utf16_def
main.ctype_utf16le
main.ctype_utf16_uca
main.ctype_utf32
main.ctype_utf32_uca
main.ctype_utf8
main.ctype_utf8mb4
main.ctype_utf8mb4_heap
main.ctype_utf8mb4_innodb
main.ctype_utf8mb4_myisam
main.ctype_utf8mb4_uca
main.ctype_utf8_uca
main.date_formats
main.datetime_456
main.default_storage_engine
main.delete
main.delete_returning
main.deprecated_features
main.derived_cond_pushdown
main.derived_opt
main.derived_view
main.distinct
main.drop-no_root
main.dyncol
main.empty_server_name-8224
main.empty_table
main.endspace
main.enforce_storage_engine_opt
main.errors
main.events_2
main.events_logs_tests
main.events_microsec
main.events_restart
main.events_scheduling
main.events_slowlog
main.events_trans
main.execution_constants
main.explain
main.explain_json
main.explain_json_format_partitions
main.explain_json_innodb
main.explain_non_select
main.ext_key_noPK_6794
main.fast_prefix_index_fetch_innodb
main.features
main.filesort_bad_i_s-7585
main.flush2
main.foreign_key
main.frm_bad_row_type-7333
main.fulltext
main.fulltext2
main.fulltext3
main.fulltext_cache
main.fulltext_charsets
main.fulltext_derived_4257
main.fulltext_derived_4316
main.fulltext_distinct
main.fulltext_left_join
main.fulltext_multi
main.fulltext_order_by
main.fulltext_update
main.fulltext_var
main.func_analyse
main.func_concat
main.func_crypt
main.func_date_add
main.func_default
main.func_des_encrypt
main.func_digest
main.func_encrypt
main.func_encrypt_ucs2
main.func_equal
main.func_gconcat
main.func_group_innodb
main.func_hybrid_type
main.func_if
main.func_in
main.func_isnull
main.func_like
main.func_math
main.func_op
main.func_regexp
main.func_regexp_pcre
main.func_rollback
main.func_sapdb
main.func_set
main.func_system
main.func_test
main.func_time
main.func_time_hires
main.func_timestamp
main.function_defaults
main.function_defaults_innodb
main.gcc296
main.get_diagnostics
main.gis
main.gis2
main.gis-alter_table_online
main.gis-precise
main.gis-rt-precise
main.gis-rtree
main.grant_4332
main.greedy_optimizer
main.group_by
main.group_by_innodb
main.group_by_null
main.group_min_max
main.group_min_max_innodb
main.handler_read_last
main.handlersocket
main.having
main.help
main.host_cache_size_functionality
main.huge_frm-6224
main.implicit_char_to_num_conversion
main.implicit_commit
main.in_datetime_241
main.index_intersect
main.index_intersect_innodb
main.index_merge_innodb
main.index_merge_myisam
main.information_schema2
main.information_schema_all_engines
main.information_schema_chmod
main.information_schema_inno
main.information_schema_parameters
main.information_schema_part
main.information_schema_routines
main.information_schema_stats
main.init_file
main.init_file_longline_3816
main.init_file_set_password-7656
main.innodb_bug878769
main.innodb_ext_key
main.innodb_group
main.innodb_icp
main.innodb_ignore_builtin
main.innodb_mrr_cpk
main.innodb_utf8
main.insert
main.insert_innodb
main.insert_select
main.insert_update
main.insert_update_autoinc-7150
main.join
main.join_cache
main.join_crash
main.join_nested
main.join_nested_jcl6
main.join_optimizer
main.join_outer
main.join_outer_innodb
main.join_outer_jcl6
main.key
main.key_cache
main.key_diff
main.key_primary
main.keyread
main.keywords
main.last_value
main.limit
main.limit_rows_examined
main.loaddata_autocom_innodb
main.locale
main.log_errchk
main.log_slow
main.log_state_bug33693
main.log_tables_upgrade
main.long_tmpdir
main.lowercase_mixed_tmpdir
main.lowercase_table
main.lowercase_table5
main.lowercase_table_grant
main.lowercase_table_qcache
main.lowercase_utf8
main.lowercase_view
main.mdev13607
main.mdev_14586
main.mdev316
main.mdl
main.merge_innodb
main.merge_mmap
main.metadata
main.mix2_myisam_ucs2
main.mrr_derived_crash_4610
main.mrr_icp_extra
main.multi_statement
main.multi_update2
main.multi_update_innodb
main.multi_update_tiny_hash
main.myisam-blob
main.myisam_enable_keys-10506
main.myisam_explain_non_select_all
main.myisam_icp
main.myisam_mrr
main.myisampack
main.myisam-system
main.mysql
main.mysql5613mysql
main.mysql57_virtual
main.mysqladmin
main.mysql_binary_mode
main.mysqlcheck
main.mysql_comments
main.mysql_cp932
main.mysqld--defaults-file
main.mysqld--help
main.mysqld_help_crash-9183
main.mysqld_option_err
main.mysqldump-compat
main.mysqldump-nl
main.mysqldump-no-binlog
main.mysqldump_restore
main.mysql_not_windows
main.mysql_protocols
main.mysqlshow
main.mysqlslap
main.mysqltest_256
main.mysqltest_cont_on_error
main.mysql_tzinfo_to_sql_symlink
main.mysql_upgrade_noengine
main.mysql_upgrade_no_innodb
main.mysql_upgrade_ssl
main.mysql_upgrade_view
main.negation_elimination
main.no_binlog
main.no_password_column-mdev-11170
main.null
main.null_key
main.odbc
main.olap
main.old-mode
main.order_by
main.order_by_innodb
main.order_by-mdev-10122
main.order_by_optimizer
main.order_by_optimizer_innodb
main.order_by_sortkey
main.order_by_zerolength-4285
main.order_fill_sortbuf
main.outfile_loaddata
main.parser
main.parser_bug21114_innodb
main.parser_precedence
main.parser_stack
main.partition
main.partition_binlog
main.partition_binlog_stmt
main.partition_blackhole
main.partition_bug18198
main.partition_cache_innodb
main.partition_cache_myisam
main.partition_charset
main.partition_column
main.partition_column_prune
main.partition_datatype
main.partition_disabled
main.partition_error
main.partition_example
main.partition_exchange
main.partition_explicit_prune
main.partition_hash
main.partition_key_cache
main.partition_list
main.partition_mgm
main.partition_mgm_err
main.partition_mgm_err2
main.partition_myisam
main.partition_not_blackhole
main.partition_not_windows
main.partition_order
main.partition_pruning
main.partition_range
main.partition_rename_longfilename
main.partition_truncate
main.partition_utf8
main.perror
main.plugin
main.plugin_auth_qa
main.plugin_auth_qa_2
main.plugin_auth_qa_3
main.plugin_innodb
main.plugin_load
main.plugin_loaderr
main.plugin_load_option
main.plugin_maturity
main.preload
main.profiling
main.progress_976225
main.ps_10nestset
main.ps_11bugs
main.ps_1general
main.ps_2myisam
main.ps_3innodb
main.ps_4heap
main.ps_5merge
main.ps_change_master
main.ps_ddl1
main.ps_max_subselect-5113
main.ps_not_windows
main.query_cache
main.query_cache_innodb
main.query_cache_merge
main.query_cache_with_views
main.range
main.range_innodb
main.range_mrr_icp
main.range_vs_index_merge
main.range_vs_index_merge_innodb
main.renamedb
main.reopen_temp_table
main.repair
main.repair_symlink-5543
main.replace
main.rollback
main.round
main.row
main.row-checksum
main.row-checksum-old
main.rowid_order_innodb
main.rpl_mysqldump_slave
main.second_frac-9175
main.select
main.select_found
main.selectivity
main.selectivity_innodb
main.selectivity_no_engine
main.select_jcl6
main.select_pkeycache
main.select_safe
main.servers
main.set_password
main.set_statement_notembedded
main.set_statement_notembedded_binlog
main.show
main.show_bad_definer-5553
main.show_create_user
main.show_function_with_pad_char_to_full_length
main.show_profile
main.show_row_order-9226
main.sighup-6580
main.signal
main.signal_demo1
main.signal_demo2
main.signal_demo3
main.signal_sqlmode
main.single_delete_update
main.single_delete_update_innodb
main.skip_grants
main.skip_log_bin
main.sp-big
main.sp-bugs
main.sp-bugs2
main.sp-destruct
main.sp-dynamic
main.sp-error
main.sp-fib
main.sp_gis
main.sp-group
main.sp_missing_4665
main.sp-no-code
main.sp-prelocking
main.sp_stress_case
main.sp_trans
main.sp_trans_log
main.sp-ucs2
main.sp-vars
main.ssl_7937
main.ssl_8k_key
main.ssl_and_innodb
main.ssl_ca
main.ssl_cert_verify
main.ssl_connect
main.ssl_crl_clients
main.stack-crash
main.statistics
main.statistics_index_crash-7362
main.stat_tables
main.stat_tables_disabled
main.stat_tables_innodb
main.stat_tables_partition
main.stat_tables_repl
main.strict
main.strict_autoinc_1myisam
main.strict_autoinc_2innodb
main.strict_autoinc_3heap
main.str_to_datetime_457
main.subselect2
main.subselect3
main.subselect3_jcl6
main.subselect4
main.subselect_cache
main.subselect-crash_15755
main.subselect_exists2in
main.subselect_exists2in_costmat
main.subselect_extra
main.subselect_extra_no_semijoin
main.subselect_gis
main.subselect_innodb
main.subselect_mat
main.subselect_mat_cost
main.subselect_mat_cost_bugs
main.subselect_notembedded
main.subselect_nulls
main.subselect_partial_match
main.subselect_sj2
main.subselect_sj2_jcl6
main.subselect_sj2_mat
main.subselect_sj_aria
main.subselect_sj_mat
main.subselect_sj_nonmerged
main.sum_distinct
main.sysdate_is_now
main.system_mysql_db
main.system_mysql_db_refs
main.table_elim
main.table_elim_debug
main.table_keyinfo-6838
main.tablelock
main.table_options
main.table_options-5867
main.temporal_literal
main.temporal_scale_4283
main.temp_table_frm
main.timezone
main.timezone2
main.timezone3
main.timezone4
main.tmp_table_count-7586
main.trigger_no_defaults-11698
main.trigger_null-8605
main.truncate
main.truncate_badse
main.truncate-stale-6500
main.type_binary
main.type_bit
main.type_bit_innodb
main.type_blob
main.type_datetime_hires
main.type_decimal
main.type_enum
main.type_float
main.type_int
main.type_nchar
main.type_newdecimal
main.type_num
main.type_num_innodb
main.type_ranges
main.type_set
main.type_temporal_innodb
main.type_temporal_mysql56
main.type_time
main.type_time_6065
main.type_time_hires
main.type_timestamp_hires
main.type_uint
main.type_varchar
main.type_year
main.update_ignore_216
main.update_innodb
main.upgrade
main.user_var
main.varbinary
main.variables_community
main.view_alias
main.warnings_engine_disabled
main.win_avg
main.win_big
main.win_big-mdev-10092
main.win_big-mdev-11697
main.win_bit
main.win_empty_over
main.win_first_last_value
main.win_insert_select
main.win_i_s
main.win_lead_lag
main.win_min_max
main.win_nth_value
main.win_orderby
main.win_percent_cume
main.win_rank
main.win_sum
main.xa_binlog
main.xml
main.xtradb_mrr
......@@ -1279,8 +1279,6 @@ void btr_search_drop_page_hash_when_freed(const page_id_t& page_id)
mtr_t mtr;
dberr_t err = DB_SUCCESS;
ut_d(export_vars.innodb_ahi_drop_lookups++);
mtr_start(&mtr);
/* If the caller has a latch on the page, then the caller must
......
......@@ -1068,10 +1068,6 @@ static SHOW_VAR innodb_status_variables[]= {
(char*) &export_vars.innodb_truncated_status_writes, SHOW_LONG},
{"available_undo_logs",
(char*) &export_vars.innodb_available_undo_logs, SHOW_LONG},
#ifdef UNIV_DEBUG
{"ahi_drop_lookups",
(char*) &export_vars.innodb_ahi_drop_lookups, SHOW_LONG},
#endif /* UNIV_DEBUG */
/* Status variables for page compression */
{"page_compression_saved",
......
......@@ -186,32 +186,6 @@ struct recv_t{
rec_list;/*!< list of log records for this page */
};
/** States of recv_addr_t */
enum recv_addr_state {
/** not yet processed */
RECV_NOT_PROCESSED,
/** page is being read */
RECV_BEING_READ,
/** log records are being applied on the page */
RECV_BEING_PROCESSED,
/** log records have been applied on the page */
RECV_PROCESSED,
/** log records have been discarded because the tablespace
does not exist */
RECV_DISCARDED
};
/** Hashed page file address struct */
struct recv_addr_t{
enum recv_addr_state state;
/*!< recovery state of the page */
unsigned space:32;/*!< space id */
unsigned page_no:32;/*!< page number */
UT_LIST_BASE_NODE_T(recv_t)
rec_list;/*!< list of log records for this page */
hash_node_t addr_hash;/*!< hash node in the hash bucket chain */
};
struct recv_dblwr_t {
/** Add a page frame to the doublewrite recovery buffer. */
void add(byte* page) {
......
......@@ -1014,12 +1014,6 @@ struct export_var_t{
of used row log buffer */
ulint innodb_onlineddl_pct_progress; /*!< Online alter progress */
#ifdef UNIV_DEBUG
ulint innodb_ahi_drop_lookups; /*!< number of adaptive hash
index lookups when freeing
file pages */
#endif /* UNIV_DEBUG */
int64_t innodb_page_compression_saved;/*!< Number of bytes saved
by page compression */
int64_t innodb_index_pages_written; /*!< Number of index pages
......
......@@ -169,6 +169,35 @@ typedef std::map<
static recv_spaces_t recv_spaces;
/** States of recv_addr_t */
enum recv_addr_state {
/** not yet processed */
RECV_NOT_PROCESSED,
/** page is being read */
RECV_BEING_READ,
/** log records are being applied on the page */
RECV_BEING_PROCESSED,
/** log records have been applied on the page */
RECV_PROCESSED,
/** log records have been discarded because the tablespace
does not exist */
RECV_DISCARDED
};
/** Hashed page file address struct */
struct recv_addr_t{
/** recovery state of the page */
recv_addr_state state;
/** tablespace identifier */
unsigned space:32;
/** page number */
unsigned page_no:32;
/** list of log records for this page */
UT_LIST_BASE_NODE_T(recv_t) rec_list;
/** hash node in the hash bucket chain */
hash_node_t addr_hash;
};
/** Report optimized DDL operation (without redo log),
corresponding to MLOG_INDEX_LOAD.
@param[in] space_id tablespace identifier
......@@ -1174,6 +1203,7 @@ recv_parse_or_apply_log_rec_body(
redo log been written with something
older than InnoDB Plugin 1.0.4. */
ut_ad(offs == FIL_PAGE_TYPE
|| srv_is_undo_tablespace(space_id)
|| offs == IBUF_TREE_SEG_HEADER
+ IBUF_HEADER + FSEG_HDR_OFFSET
|| offs == PAGE_BTR_IBUF_FREE_LIST
......@@ -1199,6 +1229,7 @@ recv_parse_or_apply_log_rec_body(
ut_ad(0
/* fil_crypt_rotate_page() writes this */
|| offs == FIL_PAGE_SPACE_ID
|| srv_is_undo_tablespace(space_id)
|| offs == IBUF_TREE_SEG_HEADER
+ IBUF_HEADER + FSEG_HDR_SPACE
|| offs == IBUF_TREE_SEG_HEADER
......
......@@ -1076,9 +1076,7 @@ row_purge_parse_undo_rec(
ut_ad(!node->table->is_temporary());
if (!fil_table_accessible(node->table)) {
dict_table_close(node->table, FALSE, FALSE);
node->table = NULL;
goto err_exit;
goto close_exit;
}
switch (type) {
......@@ -1113,6 +1111,7 @@ row_purge_parse_undo_rec(
dict_set_corrupted() works on an index, and
we do not have an index to call it with. */
dict_table_close(node->table, FALSE, FALSE);
node->table = NULL;
err_exit:
rw_lock_s_unlock(dict_operation_lock);
return(false);
......
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