diff --git a/client/mysqldump.c b/client/mysqldump.c index cb4fa022d4f..db2813158b0 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -39,7 +39,7 @@ ** 10 Jun 2003: SET NAMES and --no-set-names by Alexander Barkov */ -#define DUMP_VERSION "10.15" +#define DUMP_VERSION "10.16" #include #include @@ -111,7 +111,7 @@ static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0, opt_slave_apply= 0, opt_include_master_host_port= 0, opt_events= 0, opt_comments_used= 0, - opt_alltspcs=0, opt_notspcs= 0; + opt_alltspcs=0, opt_notspcs= 0, opt_logging; static my_bool insert_pat_inited= 0, debug_info_flag= 0, debug_check_flag= 0; static ulong opt_max_allowed_packet, opt_net_buffer_length; static MYSQL mysql_connection,*mysql=0; @@ -381,6 +381,8 @@ static struct my_option my_long_options[] = {"log-error", OPT_ERROR_LOG_FILE, "Append warnings and errors to given file.", &log_error_file, &log_error_file, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"log-queries", 0, "When restoring the dump, the server will, if logging turned on, log the queries to the general and slow query log.", + &opt_logging, &opt_logging, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, {"master-data", OPT_MASTER_DATA, "This causes the binary log position and filename to be appended to the " "output. If equal to 1, will print it as a CHANGE MASTER command; if equal" @@ -663,6 +665,10 @@ static void write_header(FILE *sql_file, char *db_name) print_comment(sql_file, 0, "-- Server version\t%s\n", mysql_get_server_info(&mysql_connection)); + if (!opt_logging) + fprintf(sql_file, +"\n/*M!100101 SET LOCAL SQL_LOG_OFF=0, LOCAL SLOW_QUERY_LOG=0 */;"); + if (opt_set_charset) fprintf(sql_file, "\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;" diff --git a/mysql-test/r/log_state.result b/mysql-test/r/log_state.result index cc6f3709ae4..f157887de4b 100644 --- a/mysql-test/r/log_state.result +++ b/mysql-test/r/log_state.result @@ -42,6 +42,7 @@ select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id # Switch to connection default set global slow_query_log= ON; +set local slow_query_log= ON; # Switch to connection con1 set session long_query_time = @long_query_time; select sleep(@long_query_time + 1); @@ -49,7 +50,13 @@ sleep(@long_query_time + 1) 0 select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id -TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 select sleep(@long_query_time + 1) THREAD_ID +set local slow_query_log= ON; +select sleep(@long_query_time + 2); +sleep(@long_query_time + 2) +0 +select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; +start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text thread_id +TIMESTAMP USER_HOST QUERY_TIME 00:00:00.000000 1 0 test 0 0 1 select sleep(@long_query_time + 2) THREAD_ID # Switch to connection default show global variables where Variable_name = 'general_log' or Variable_name = 'slow_query_log'; @@ -62,6 +69,7 @@ set global general_log= OFF; set global slow_query_log= ON; set global slow_query_log= OFF; set global slow_query_log= OFF; +set local slow_query_log= ON; set global general_log= ON; truncate table mysql.general_log; create table t1(f1 int); @@ -124,6 +132,9 @@ Variable_name Value general_log OFF show variables like 'slow_query_log'; Variable_name Value +slow_query_log ON +show global variables like 'slow_query_log'; +Variable_name Value slow_query_log OFF set global general_log=ON; set global log_output=default; diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index 4b0b3faf629..a7ef5d4d92f 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -5290,3 +5290,13 @@ Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help +# +# Test mysqldump with --disable-query-logs +# +create table t1 (a int); +insert into t1 values (1); +drop table t1; +select * from t1; +a +1 +drop table t1; diff --git a/mysql-test/suite/sys_vars/r/slow_query_log_basic.result b/mysql-test/suite/sys_vars/r/slow_query_log_basic.result index bf9a83f0380..049404f5648 100644 --- a/mysql-test/suite/sys_vars/r/slow_query_log_basic.result +++ b/mysql-test/suite/sys_vars/r/slow_query_log_basic.result @@ -42,10 +42,17 @@ ERROR 42000: Variable 'slow_query_log' can't be set to the value of ' ' SET @@global.slow_query_log = ''; ERROR 42000: Variable 'slow_query_log' can't be set to the value of '' '#-------------------FN_DYNVARS_004_04----------------------------#' -SET @@session.slow_query_log = OFF; -ERROR HY000: Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL +SET @@global.slow_query_log = ON; +SET @@session.slow_query_log = ON; SELECT @@session.slow_query_log; -ERROR HY000: Variable 'slow_query_log' is a GLOBAL variable +@@session.slow_query_log +1 +SET @@session.slow_query_log = OFF; +SELECT @@session.slow_query_log; +@@session.slow_query_log +0 +SET @@global.slow_query_log = OFF; +SET @@session.slow_query_log = ON; '#----------------------FN_DYNVARS_004_05------------------------#' SELECT IF(@@global.slow_query_log, "ON", "OFF") = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES @@ -72,12 +79,11 @@ SELECT @@global.slow_query_log; 0 '#---------------------FN_DYNVARS_004_08----------------------#' SET @@global.slow_query_log = ON; +SET @@local.slow_query_log = OFF; SELECT @@slow_query_log = @@global.slow_query_log; @@slow_query_log = @@global.slow_query_log -1 +0 '#---------------------FN_DYNVARS_004_09----------------------#' -SET slow_query_log = ON; -ERROR HY000: Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL SET local.slow_query_log = OFF; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'slow_query_log = OFF' at line 1 SELECT local.slow_query_log; diff --git a/mysql-test/suite/sys_vars/r/slow_query_log_func.result b/mysql-test/suite/sys_vars/r/slow_query_log_func.result index f01b2c4c48b..b431f963239 100644 --- a/mysql-test/suite/sys_vars/r/slow_query_log_func.result +++ b/mysql-test/suite/sys_vars/r/slow_query_log_func.result @@ -2,7 +2,7 @@ SET @global_slow_query_log = @@global.slow_query_log; SET @global_log_output = @@global.log_output; SET @@session.long_query_time=1; SET @@global.log_output = 'TABLE'; -'----When slow_query_log = OFF----' +'----When global.slow_query_log = OFF----' SET @@global.slow_query_log = OFF; TRUNCATE mysql.slow_log; SELECT sleep(2); @@ -11,7 +11,7 @@ sleep(2) SELECT count(*) FROM mysql.slow_log; count(*) 0 -'----When slow_query_log = ON-----' +'----When global.slow_query_log = ON-----' SET @@global.slow_query_log = ON; TRUNCATE mysql.slow_log; SELECT sleep(2); @@ -20,6 +20,16 @@ sleep(2) SELECT count(*) > 0 FROM mysql.slow_log; count(*) > 0 1 +'----When local.slow_query_log = OFF-----' +SET @@local.slow_query_log = OFF; +TRUNCATE mysql.slow_log; +SELECT sleep(2); +sleep(2) +0 +SELECT count(*) FROM mysql.slow_log; +count(*) +0 +SET @@local.slow_query_log = ON; 'Bug#47905 stored procedures not logged correctly to slow query log' TRUNCATE mysql.slow_log; CREATE PROCEDURE p_test() diff --git a/mysql-test/suite/sys_vars/t/slow_query_log_basic.test b/mysql-test/suite/sys_vars/t/slow_query_log_basic.test index fef37b5ff4a..b429f9f5cea 100644 --- a/mysql-test/suite/sys_vars/t/slow_query_log_basic.test +++ b/mysql-test/suite/sys_vars/t/slow_query_log_basic.test @@ -90,14 +90,16 @@ SET @@global.slow_query_log = ''; --echo '#-------------------FN_DYNVARS_004_04----------------------------#' ################################################################## -# Test if accessing session slow_query_log gives error # +# Test that accessing session slow_query_log dows not give # ################################################################## ---Error ER_GLOBAL_VARIABLE -SET @@session.slow_query_log = OFF; ---Error ER_INCORRECT_GLOBAL_LOCAL_VAR +SET @@global.slow_query_log = ON; +SET @@session.slow_query_log = ON; SELECT @@session.slow_query_log; - +SET @@session.slow_query_log = OFF; +SELECT @@session.slow_query_log; +SET @@global.slow_query_log = OFF; +SET @@session.slow_query_log = ON; --echo '#----------------------FN_DYNVARS_004_05------------------------#' ############################################################################## @@ -132,18 +134,17 @@ SELECT @@global.slow_query_log; --echo '#---------------------FN_DYNVARS_004_08----------------------#' ############################################################################## # Check if accessing variable with SESSION,LOCAL and without SCOPE points # -# to same session variable # +# to same session variable (doesn't) # ############################################################################## SET @@global.slow_query_log = ON; +SET @@local.slow_query_log = OFF; SELECT @@slow_query_log = @@global.slow_query_log; --echo '#---------------------FN_DYNVARS_004_09----------------------#' ###################################################################### # Check if slow_query_log can be accessed with and without @@ sign # ###################################################################### ---Error ER_GLOBAL_VARIABLE -SET slow_query_log = ON; --Error ER_PARSE_ERROR SET local.slow_query_log = OFF; --Error ER_UNKNOWN_TABLE diff --git a/mysql-test/suite/sys_vars/t/slow_query_log_func.test b/mysql-test/suite/sys_vars/t/slow_query_log_func.test index dd202ec20ff..2f1d7449976 100644 --- a/mysql-test/suite/sys_vars/t/slow_query_log_func.test +++ b/mysql-test/suite/sys_vars/t/slow_query_log_func.test @@ -10,7 +10,7 @@ SET @@session.long_query_time=1; SET @@global.log_output = 'TABLE'; #========================================= ---echo '----When slow_query_log = OFF----' +--echo '----When global.slow_query_log = OFF----' #========================================= SET @@global.slow_query_log = OFF; @@ -21,7 +21,7 @@ SELECT sleep(2); SELECT count(*) FROM mysql.slow_log; #========================================= ---echo '----When slow_query_log = ON-----' +--echo '----When global.slow_query_log = ON-----' #========================================= SET @@global.slow_query_log = ON; @@ -31,6 +31,17 @@ SELECT sleep(2); SELECT count(*) > 0 FROM mysql.slow_log; +#========================================= +--echo '----When local.slow_query_log = OFF-----' +#========================================= + +SET @@local.slow_query_log = OFF; +TRUNCATE mysql.slow_log; +# The sleep is the slow query +SELECT sleep(2); + +SELECT count(*) FROM mysql.slow_log; +SET @@local.slow_query_log = ON; #========================================================================== --echo 'Bug#47905 stored procedures not logged correctly to slow query log' diff --git a/mysql-test/t/log_state.test b/mysql-test/t/log_state.test index 3231769a4bf..12c7a7fd92b 100644 --- a/mysql-test/t/log_state.test +++ b/mysql-test/t/log_state.test @@ -52,12 +52,18 @@ select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; connection default; set global slow_query_log= ON; +set local slow_query_log= ON; --echo # Switch to connection con1 connection con1; set session long_query_time = @long_query_time; select sleep(@long_query_time + 1); --replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME 12 THREAD_ID select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; +set local slow_query_log= ON; +select sleep(@long_query_time + 2); +--replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME 12 THREAD_ID +select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%'; + --echo # Switch to connection default connection default; show global variables @@ -69,6 +75,7 @@ set global general_log= OFF; set global slow_query_log= ON; set global slow_query_log= OFF; set global slow_query_log= OFF; +set local slow_query_log= ON; set global general_log= ON; truncate table mysql.general_log; @@ -127,6 +134,7 @@ set global general_log_file= default; set global slow_query_log_file= default; show variables like 'general_log'; show variables like 'slow_query_log'; +show global variables like 'slow_query_log'; set global general_log=ON; set global log_output=default; show variables like 'log_output'; diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test index 9d6789541c0..8461ebff412 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -2473,3 +2473,18 @@ drop table t1, t2; --exec $MYSQL_DUMP --user=foo 2>&1 > $MYSQLTEST_VARDIR/tmp/bug6056.out --exec $MYSQL_DUMP --help > $MYSQLTEST_VARDIR/tmp/bug6056.out +--echo # +--echo # Test mysqldump with --disable-query-logs +--echo # + +create table t1 (a int); +insert into t1 values (1); + +--exec $MYSQL_DUMP --hex-blob --character-sets-dir=$MYSQL_SHAREDIR/charsets --tab=$MYSQLTEST_VARDIR/tmp/ test t1 +--exec $MYSQL_DUMP --disable-log-queries --skip-comments test t1 >$MYSQLTEST_VARDIR/tmp/mysqldump-test.out +drop table t1; + +--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/mysqldump-test.out +select * from t1; +drop table t1; +--remove_file $MYSQLTEST_VARDIR/tmp/mysqldump-test.out diff --git a/sql/log.cc b/sql/log.cc index 75a895e25f8..d2032b0f4ab 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -517,7 +517,7 @@ bool LOGGER::is_log_table_enabled(uint log_table_type) { switch (log_table_type) { case QUERY_LOG_SLOW: - return (table_log_handler != NULL) && opt_slow_log; + return (table_log_handler != NULL) && global_system_variables.sql_log_slow; case QUERY_LOG_GENERAL: return (table_log_handler != NULL) && opt_log ; default: @@ -1048,7 +1048,7 @@ bool Log_to_file_event_handler::init() { if (!is_initialized) { - if (opt_slow_log) + if (global_system_variables.sql_log_slow) mysql_slow_log.open_slow_log(opt_slow_logname); if (opt_log) @@ -1072,7 +1072,7 @@ void Log_to_file_event_handler::flush() /* reopen log files */ if (opt_log) mysql_log.reopen_file(); - if (opt_slow_log) + if (global_system_variables.sql_log_slow) mysql_slow_log.reopen_file(); } @@ -1200,7 +1200,7 @@ bool LOGGER::flush_slow_log() logger.lock_exclusive(); /* Reopen slow log file */ - if (opt_slow_log) + if (global_system_variables.sql_log_slow) file_log_handler->get_mysql_slow_log()->reopen_file(); /* End of log flush */ @@ -1270,11 +1270,11 @@ bool LOGGER::slow_log_print(THD *thd, const char *query, uint query_length, if (*slow_log_handler_list) { /* do not log slow queries from replication threads */ - if (thd->slave_thread && !opt_log_slow_slave_statements) + if (!thd->variables.sql_log_slow) return 0; lock_shared(); - if (!opt_slow_log) + if (!global_system_variables.sql_log_slow) { unlock(); return 0; @@ -1448,7 +1448,7 @@ bool LOGGER::activate_log_handler(THD* thd, uint log_type) lock_exclusive(); switch (log_type) { case QUERY_LOG_SLOW: - if (!opt_slow_log) + if (!global_system_variables.sql_log_slow) { file_log= file_log_handler->get_mysql_slow_log(); @@ -1462,7 +1462,7 @@ bool LOGGER::activate_log_handler(THD* thd, uint log_type) else { init_slow_log(log_output_options); - opt_slow_log= TRUE; + global_system_variables.sql_log_slow= TRUE; } } break; @@ -1501,7 +1501,7 @@ void LOGGER::deactivate_log_handler(THD *thd, uint log_type) switch (log_type) { case QUERY_LOG_SLOW: - tmp_opt= &opt_slow_log; + tmp_opt= &global_system_variables.sql_log_slow; file_log= file_log_handler->get_mysql_slow_log(); break; case QUERY_LOG_GENERAL: diff --git a/sql/log_event.cc b/sql/log_event.cc index 6a85893803e..27dddb69144 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -4280,6 +4280,7 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi, THD_STAGE_INFO(thd, stage_init); MYSQL_SET_STATEMENT_TEXT(thd->m_statement_psi, thd->query(), thd->query_length()); + thd->enable_slow_log= thd->variables.sql_log_slow; mysql_parse(thd, thd->query(), thd->query_length(), &parser_state); /* Finalize server status flags after executing a statement. */ thd->update_server_status(); @@ -4287,18 +4288,6 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi, } thd->variables.option_bits&= ~OPTION_MASTER_SQL_ERROR; - - /* - Resetting the enable_slow_log thd variable. - - We need to reset it back to the opt_log_slow_slave_statements - value after the statement execution (and slow logging - is done). It might have changed if the statement was an - admin statement (in which case, down in mysql_parse execution - thd->enable_slow_log is set to the value of - opt_log_slow_admin_statements). - */ - thd->enable_slow_log= opt_log_slow_slave_statements; } else { diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 066dae224eb..e420a70b33f 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -373,7 +373,7 @@ static DYNAMIC_ARRAY all_options; /* Global variables */ bool opt_bin_log, opt_bin_log_used=0, opt_ignore_builtin_innodb= 0; -my_bool opt_log, opt_slow_log, debug_assert_if_crashed_table= 0, opt_help= 0; +my_bool opt_log, debug_assert_if_crashed_table= 0, opt_help= 0; static my_bool opt_abort; ulonglong log_output_options; my_bool opt_userstat_running; @@ -3329,7 +3329,7 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused))) sql_print_information("Got signal %d to shutdown mysqld",sig); #endif /* switch to the old log message processing */ - logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_FILE:LOG_NONE, + logger.set_handlers(LOG_FILE, global_system_variables.sql_log_slow ? LOG_FILE:LOG_NONE, opt_log ? LOG_FILE:LOG_NONE); DBUG_PRINT("info",("Got signal: %d abort_loop: %d",sig,abort_loop)); if (!abort_loop) @@ -3367,13 +3367,15 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused))) if (log_output_options & LOG_NONE) { logger.set_handlers(LOG_FILE, - opt_slow_log ? LOG_TABLE : LOG_NONE, + global_system_variables.sql_log_slow ? + LOG_TABLE : LOG_NONE, opt_log ? LOG_TABLE : LOG_NONE); } else { logger.set_handlers(LOG_FILE, - opt_slow_log ? log_output_options : LOG_NONE, + global_system_variables.sql_log_slow ? + log_output_options : LOG_NONE, opt_log ? log_output_options : LOG_NONE); } break; @@ -4263,7 +4265,8 @@ static int init_common_variables() "--log option, log tables are used. " "To enable logging to files use the --log-output option."); - if (opt_slow_log && opt_slow_logname && *opt_slow_logname && + if (global_system_variables.sql_log_slow && opt_slow_logname && + *opt_slow_logname && !(log_output_options & (LOG_FILE | LOG_NONE))) sql_print_warning("Although a path was specified for the " "--log-slow-queries option, log tables are used. " @@ -4904,7 +4907,9 @@ a file name for --log-bin-index option", opt_binlog_index_name); /* purecov: end */ } - logger.set_handlers(LOG_FILE, opt_slow_log ? log_output_options:LOG_NONE, + logger.set_handlers(LOG_FILE, + global_system_variables.sql_log_slow ? + log_output_options:LOG_NONE, opt_log ? log_output_options:LOG_NONE); } @@ -8123,7 +8128,7 @@ static int mysql_init_variables(void) /* We can only test for sub paths if my_symlink.c is using realpath */ myisam_test_invalid_symlink= test_if_data_home_dir; #endif - opt_log= opt_slow_log= 0; + opt_log= 0; opt_bin_log= opt_bin_log_used= 0; opt_disable_networking= opt_skip_show_db=0; opt_skip_name_resolve= 0; @@ -8818,7 +8823,7 @@ static int get_options(int *argc_ptr, char ***argv_ptr) if ((opt_log_slow_admin_statements || opt_log_queries_not_using_indexes || opt_log_slow_slave_statements) && - !opt_slow_log) + !global_system_variables.sql_log_slow) sql_print_warning("options --log-slow-admin-statements, --log-queries-not-using-indexes and --log-slow-slave-statements have no effect if --log_slow_queries is not set"); if (global_system_variables.net_buffer_length > global_system_variables.max_allowed_packet) @@ -9033,7 +9038,7 @@ void set_server_version(void) if (!strstr(MYSQL_SERVER_SUFFIX_STR, "-debug")) end= strmov(end, "-debug"); #endif - if (opt_log || opt_slow_log || opt_bin_log) + if (opt_log || global_system_variables.sql_log_slow || opt_bin_log) strmov(end, "-log"); // This may slow down system } diff --git a/sql/mysqld.h b/sql/mysqld.h index a1656a49047..21c020b8b5e 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -80,7 +80,7 @@ extern CHARSET_INFO *character_set_filesystem; extern MY_BITMAP temp_pool; extern bool opt_large_files, server_id_supplied; extern bool opt_update_log, opt_bin_log, opt_error_log; -extern my_bool opt_log, opt_slow_log, opt_bootstrap; +extern my_bool opt_log, opt_bootstrap; extern my_bool opt_backup_history_log; extern my_bool opt_backup_progress_log; extern ulonglong log_output_options; diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index e72d3470a7f..90ee2360eb7 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -235,7 +235,7 @@ handle_rpl_parallel_thread(void *arg) thd->security_ctx->skip_grants(); thd->variables.max_allowed_packet= slave_max_allowed_packet; thd->slave_thread= 1; - thd->enable_slow_log= opt_log_slow_slave_statements; + thd->variables.sql_log_slow= opt_log_slow_slave_statements; thd->variables.log_slow_filter= global_system_variables.log_slow_filter; set_slave_thread_options(thd); thd->client_capabilities = CLIENT_LOCAL_FILES; diff --git a/sql/slave.cc b/sql/slave.cc index f7d019a6c39..bb90d24b0bb 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2922,7 +2922,7 @@ static int init_slave_thread(THD* thd, Master_info *mi, thd->security_ctx->skip_grants(); thd->slave_thread= 1; thd->connection_name= mi->connection_name; - thd->enable_slow_log= opt_log_slow_slave_statements; + thd->variables.sql_log_slow= opt_log_slow_slave_statements; thd->variables.log_slow_filter= global_system_variables.log_slow_filter; set_slave_thread_options(thd); thd->client_capabilities = CLIENT_LOCAL_FILES; diff --git a/sql/sql_class.h b/sql/sql_class.h index f3537086132..f96110e0b0f 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -567,9 +567,6 @@ typedef struct system_variables ulong log_slow_rate_limit; ulong binlog_format; ///< binlog format for this thd (see enum_binlog_format) ulong progress_report_time; - my_bool binlog_annotate_row_events; - my_bool binlog_direct_non_trans_update; - my_bool sql_log_bin; ulong completion_type; ulong query_cache_type; ulong tx_isolation; @@ -608,6 +605,10 @@ typedef struct system_variables my_bool old_passwords; my_bool big_tables; my_bool query_cache_strip_comments; + my_bool sql_log_slow; + my_bool sql_log_bin; + my_bool binlog_annotate_row_events; + my_bool binlog_direct_non_trans_update; plugin_ref table_plugin; plugin_ref tmp_table_plugin; diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 9df4fd965a5..53ac095d1d0 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -1006,8 +1006,10 @@ int Explain_insert::print_explain(Explain_query *query, void delete_explain_query(LEX *lex) { + DBUG_ENTER("delete_explain_query"); delete lex->explain; lex->explain= NULL; + DBUG_VOID_RETURN; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 019fd55e3d8..1da595858b3 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1131,7 +1131,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, Commands which always take a long time are logged into the slow log only if opt_log_slow_admin_statements is set. */ - thd->enable_slow_log= TRUE; + thd->enable_slow_log= thd->variables.sql_log_slow; thd->query_plan_flags= QPLAN_INIT; thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */ @@ -1516,7 +1516,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, status_var_increment(thd->status_var.com_other); - thd->enable_slow_log= opt_log_slow_admin_statements; + thd->enable_slow_log&= opt_log_slow_admin_statements; thd->query_plan_flags|= QPLAN_ADMIN; if (check_global_access(thd, REPL_SLAVE_ACL)) break; @@ -1784,7 +1784,6 @@ void log_slow_statement(THD *thd) { DBUG_ENTER("log_slow_statement"); - /* The following should never be true with our current code base, but better to keep this here so we don't accidently try to log a @@ -1795,12 +1794,10 @@ void log_slow_statement(THD *thd) /* Follow the slow log filter configuration. */ - if (!thd->enable_slow_log || + if (!thd->enable_slow_log || !global_system_variables.sql_log_slow || (thd->variables.log_slow_filter && !(thd->variables.log_slow_filter & thd->query_plan_flags))) - { goto end; - } if (((thd->server_status & SERVER_QUERY_WAS_SLOW) || ((thd->server_status & @@ -3060,7 +3057,7 @@ end_with_restore_list: and thus classify as slow administrative statements just like ALTER TABLE. */ - thd->enable_slow_log= opt_log_slow_admin_statements; + thd->enable_slow_log&= opt_log_slow_admin_statements; thd->query_plan_flags|= QPLAN_ADMIN; bzero((char*) &create_info, sizeof(create_info)); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index ebceae70ee5..9ea496a81dc 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -3205,7 +3205,7 @@ void Prepared_statement::setup_set_params() because we want to look it up in the query cache) or not. */ if ((mysql_bin_log.is_open() && is_update_query(lex->sql_command)) || - opt_log || opt_slow_log || + opt_log || thd->variables.sql_log_slow || query_cache_is_cacheable_query(lex)) { set_params_from_vars= insert_params_from_vars_with_log; diff --git a/sql/sql_reload.cc b/sql/sql_reload.cc index bb3d5bb899a..10ff6dee31f 100644 --- a/sql/sql_reload.cc +++ b/sql/sql_reload.cc @@ -130,7 +130,7 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options, result= 1; } - if ((options & REFRESH_SLOW_LOG) && opt_slow_log) + if ((options & REFRESH_SLOW_LOG) && global_system_variables.sql_log_slow) logger.flush_slow_log(); if ((options & REFRESH_GENERAL_LOG) && opt_log) diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 9495d16247d..7f7c725afc7 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3841,7 +3841,7 @@ static void reopen_slow_log(char* name) static bool fix_slow_log_file(sys_var *self, THD *thd, enum_var_type type) { return fix_log(&opt_slow_logname, opt_log_basename, "-slow.log", - opt_slow_log, reopen_slow_log); + global_system_variables.sql_log_slow, reopen_slow_log); } static Sys_var_charptr Sys_slow_log_path( "slow_query_log_file", "Log slow queries to given log file. " @@ -3892,6 +3892,7 @@ static Sys_var_have Sys_have_symlink( READ_ONLY GLOBAL_VAR(have_symlink), NO_CMD_LINE); static bool fix_log_state(sys_var *self, THD *thd, enum_var_type type); + static Sys_var_mybool Sys_general_log( "general_log", "Log connections and queries to a table or log file. " "Defaults logging to a file 'hostname'.log or a table mysql.general_log" @@ -3905,9 +3906,9 @@ static Sys_var_mybool Sys_slow_query_log( "Log slow queries to a table or log file. Defaults logging to a file " "'hostname'-slow.log or a table mysql.slow_log if --log-output=TABLE is " "used. Must be enabled to activate other slow log options", - GLOBAL_VAR(opt_slow_log), CMD_LINE(OPT_ARG), - DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), - ON_UPDATE(fix_log_state)); + SESSION_VAR(sql_log_slow), CMD_LINE(OPT_ARG), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(fix_log_state)); static bool fix_log_state(sys_var *self, THD *thd, enum_var_type type) { @@ -3915,6 +3916,9 @@ static bool fix_log_state(sys_var *self, THD *thd, enum_var_type type) my_bool *UNINIT_VAR(newvalptr), newval, UNINIT_VAR(oldval); uint UNINIT_VAR(log_type); + if (type != OPT_GLOBAL) + return 0; + if (self == &Sys_general_log) { newvalptr= &opt_log; @@ -3923,7 +3927,7 @@ static bool fix_log_state(sys_var *self, THD *thd, enum_var_type type) } else if (self == &Sys_slow_query_log) { - newvalptr= &opt_slow_log; + newvalptr= &global_system_variables.sql_log_slow; oldval= logger.get_slow_log_file_handler()->is_open(); log_type= QUERY_LOG_SLOW; }