diff --git a/mysql-test/r/innodb_ignore_builtin.result b/mysql-test/r/innodb_ignore_builtin.result new file mode 100644 index 00000000000..4694a61b20a --- /dev/null +++ b/mysql-test/r/innodb_ignore_builtin.result @@ -0,0 +1,9 @@ +show variables like 'ignore_builtin_innodb'; +Variable_name Value +ignore_builtin_innodb ON +select PLUGIN_NAME from information_schema.plugins +where PLUGIN_NAME = "InnoDb"; +PLUGIN_NAME +select ENGINE from information_schema.engines +where ENGINE = "InnoDB"; +ENGINE diff --git a/mysql-test/t/innodb_ignore_builtin-master.opt b/mysql-test/t/innodb_ignore_builtin-master.opt new file mode 100644 index 00000000000..f7289eed20e --- /dev/null +++ b/mysql-test/t/innodb_ignore_builtin-master.opt @@ -0,0 +1 @@ +--ignore_builtin_innodb diff --git a/mysql-test/t/innodb_ignore_builtin.test b/mysql-test/t/innodb_ignore_builtin.test new file mode 100644 index 00000000000..6f987bcf891 --- /dev/null +++ b/mysql-test/t/innodb_ignore_builtin.test @@ -0,0 +1,8 @@ +# +# Bug #42610: Dynamic plugin broken in 5.1.31 +# +show variables like 'ignore_builtin_innodb'; +select PLUGIN_NAME from information_schema.plugins +where PLUGIN_NAME = "InnoDb"; +select ENGINE from information_schema.engines +where ENGINE = "InnoDB"; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 9ce8077249c..015128cda1f 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -1953,6 +1953,7 @@ extern my_bool opt_log, opt_slow_log; extern ulong log_output_options; extern my_bool opt_log_queries_not_using_indexes; extern bool opt_disable_networking, opt_skip_show_db; +extern bool opt_ignore_builtin_innodb; extern my_bool opt_character_set_client_handshake; extern bool volatile abort_loop, shutdown_in_progress; extern uint volatile thread_count, thread_running, global_read_lock; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a2ccbc42e77..0213eea889b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -378,7 +378,7 @@ static pthread_cond_t COND_thread_cache, COND_flush_thread_cache; /* Global variables */ -bool opt_update_log, opt_bin_log; +bool opt_update_log, opt_bin_log, opt_ignore_builtin_innodb= 0; my_bool opt_log, opt_slow_log; ulong log_output_options; my_bool opt_log_queries_not_using_indexes= 0; @@ -5585,7 +5585,8 @@ enum options_mysqld OPT_OLD_MODE, OPT_SLAVE_EXEC_MODE, OPT_GENERAL_LOG_FILE, - OPT_SLOW_QUERY_LOG_FILE + OPT_SLOW_QUERY_LOG_FILE, + OPT_IGNORE_BUILTIN_INNODB }; @@ -5791,6 +5792,9 @@ Disable with --skip-large-pages.", (uchar**) &opt_large_pages, (uchar**) &opt_large_pages, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, #endif + {"ignore-builtin-innodb", OPT_IGNORE_BUILTIN_INNODB , + "Disable initialization of builtin InnoDB plugin", + 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"init-connect", OPT_INIT_CONNECT, "Command(s) that are executed for each new connection", (uchar**) &opt_init_connect, (uchar**) &opt_init_connect, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, @@ -7484,6 +7488,7 @@ static int mysql_init_variables(void) log_output_options= find_bit_type(log_output_str, &log_output_typelib); opt_bin_log= 0; opt_disable_networking= opt_skip_show_db=0; + opt_ignore_builtin_innodb= 0; opt_logname= opt_update_logname= opt_binlog_index_name= opt_slow_logname= 0; opt_tc_log_file= (char *)"tc.log"; // no hostname in tc_log file name ! opt_secure_auth= 0; @@ -7781,6 +7786,9 @@ mysqld_get_one_option(int optid, case (int) OPT_BIG_TABLES: thd_startup_options|=OPTION_BIG_TABLES; break; + case (int) OPT_IGNORE_BUILTIN_INNODB: + opt_ignore_builtin_innodb= 1; + break; case (int) OPT_ISAM_LOG: opt_myisam_log=1; break; diff --git a/sql/set_var.cc b/sql/set_var.cc index 07e1528d483..f14068fcfcb 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -275,6 +275,11 @@ static sys_var_const sys_ft_query_expansion_limit(&vars, static sys_var_const sys_ft_stopword_file(&vars, "ft_stopword_file", OPT_GLOBAL, SHOW_CHAR_PTR, (uchar*) &ft_stopword_file); + +static sys_var_const sys_ignore_builtin_innodb(&vars, "ignore_builtin_innodb", + OPT_GLOBAL, SHOW_BOOL, + (uchar*) &opt_ignore_builtin_innodb); + sys_var_str sys_init_connect(&vars, "init_connect", 0, sys_update_init_connect, sys_default_init_connect,0); diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index 0df1631294b..60f205ec8e8 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -1138,6 +1138,9 @@ int plugin_init(int *argc, char **argv, int flags) { for (plugin= *builtins; plugin->info; plugin++) { + if (opt_ignore_builtin_innodb && + !my_strcasecmp(&my_charset_latin1, plugin->name, "InnoDB")) + continue; /* by default, ndbcluster and federated are disabled */ def_enabled= my_strcasecmp(&my_charset_latin1, plugin->name, "NDBCLUSTER") != 0 &&