Below is the list of changes that have just been committed into a local
5.1 repository of gluh. When gluh does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2304 06/04/12 19:10:15 gluh@stripped +12 -0
WL#3015: Logging Improvements - No Restarts
Added SLOW_QUERY_LOG & GENERAL_LOG global variables.
Added slow-query-log & general-log startup options
SLOW_QUERY_LOG & GENERAL_LOG can be set 'ON' or 'OFF'
and turn logs ON/OFF while server is running.
slow-query-log & general-log startup options
can be 0 or 1 and enable | disable logging
at startup. These options have sence
only if --log & --log-slow-queries are set.
If --log & --log-slow-queries are set and
slow-query-log & general-log omitted then
slow-query-log & general-log set to 1 automatically
(to keep old mysqld behaviour).
If slow-query-log & general-log have no argument then
their values are 0.
mysql-test/t/log_state.test
1.1 06/04/12 19:08:23 gluh@stripped +68 -0
mysql-test/t/log_state.test
1.0 06/04/12 19:08:23 gluh@stripped +0 -0
BitKeeper file /home/gluh/MySQL/Devel/5.1.3015/mysql-test/t/log_state.test
mysql-test/t/log_state-master.opt
1.1 06/04/12 19:08:22 gluh@stripped +6 -0
mysql-test/r/log_state.result
1.1 06/04/12 19:08:22 gluh@stripped +84 -0
sql/sql_delete.cc
1.180 06/04/12 19:08:22 gluh@stripped +4 -4
WL#3015: Logging Improvements - No Restarts
'truncate table slow_log|general', keep status of logs
mysql-test/t/log_state-master.opt
1.0 06/04/12 19:08:22 gluh@stripped +0 -0
BitKeeper file /home/gluh/MySQL/Devel/5.1.3015/mysql-test/t/log_state-master.opt
mysql-test/r/log_state.result
1.0 06/04/12 19:08:22 gluh@stripped +0 -0
BitKeeper file /home/gluh/MySQL/Devel/5.1.3015/mysql-test/r/log_state.result
sql/share/errmsg.txt
1.91 06/04/12 19:08:21 gluh@stripped +2 -0
WL#3015: Logging Improvements - No Restarts
added error message
sql/set_var.h
1.85 06/04/12 19:08:21 gluh@stripped +10 -0
WL#3015: Logging Improvements - No Restarts
new class sys_var_log_state
sql/set_var.cc
1.182 06/04/12 19:08:21 gluh@stripped +42 -0
WL#3015: Logging Improvements - No Restarts
added 'slow-query_log' & 'general_log' options
sql/mysqld.cc
1.554 06/04/12 19:08:21 gluh@stripped +24 -2
WL#3015: Logging Improvements - No Restarts
added 'slow-query-log' & 'general-log' options
sql/mysql_priv.h
1.391 06/04/12 19:08:21 gluh@stripped +2 -0
WL#3015: Logging Improvements - No Restarts
sql/log.h
1.9 06/04/12 19:08:21 gluh@stripped +3 -0
WL#3015: Logging Improvements - No Restarts
added methods to logger
void deactivate_log_handlers(THD* thd, uint log_type);
void activate_log_handlers(THD* thd, uint log_type);
sql/log.cc
1.203 06/04/12 19:08:21 gluh@stripped +81 -18
WL#3015: Logging Improvements - No Restarts
added methods to logger
void deactivate_log_handlers(THD* thd, uint log_type);
void activate_log_handlers(THD* thd, uint log_type);
mysql-test/r/show_check.result
1.94 06/04/12 19:08:21 gluh@stripped +7 -13
WL#3015: Logging Improvements - No Restarts
result fix
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: gluh
# Host: eagle.intranet.mysql.r18.ru
# Root: /home/gluh/MySQL/Devel/5.1.3015
--- 1.202/sql/log.cc Fri Apr 7 19:45:42 2006
+++ 1.203/sql/log.cc Wed Apr 12 19:08:21 2006
@@ -280,8 +280,10 @@ bool Log_to_csv_event_handler::reopen_lo
void Log_to_csv_event_handler::cleanup()
{
- close_log_table(QUERY_LOG_GENERAL, FALSE);
- close_log_table(QUERY_LOG_SLOW, FALSE);
+ if (opt_general_log)
+ close_log_table(QUERY_LOG_GENERAL, FALSE);
+ if (opt_slow_query_log)
+ close_log_table(QUERY_LOG_SLOW, FALSE);
logger.is_log_tables_initialized= FALSE;
}
@@ -534,10 +536,10 @@ bool Log_to_file_event_handler::init()
{
if (!is_initialized)
{
- if (opt_slow_log)
+ if (opt_slow_query_log)
mysql_slow_log.open_slow_log(opt_slow_logname);
- if (opt_log)
+ if (opt_general_log)
mysql_log.open_query_log(opt_logname);
is_initialized= TRUE;
@@ -556,8 +558,10 @@ void Log_to_file_event_handler::cleanup(
void Log_to_file_event_handler::flush()
{
/* reopen log files */
- mysql_log.new_file(1);
- mysql_slow_log.new_file(1);
+ if (opt_general_log)
+ mysql_log.new_file(1);
+ if (opt_slow_query_log)
+ mysql_slow_log.new_file(1);
}
/*
@@ -684,8 +688,10 @@ bool LOGGER::flush_logs(THD *thd)
this will lock and wait for all but the logger thread to release the
tables. Then we could reopen log tables. Then release the name locks.
*/
- lock_and_wait_for_table_name(thd, &close_slow_log);
- lock_and_wait_for_table_name(thd, &close_general_log);
+ if(opt_slow_query_log)
+ lock_and_wait_for_table_name(thd, &close_slow_log);
+ if(opt_general_log)
+ lock_and_wait_for_table_name(thd, &close_general_log);
/* deny others from logging to general and slow log, while reopening tables */
logger.lock();
@@ -918,26 +924,79 @@ void LOGGER::init_general_log(uint gener
}
+void LOGGER::activate_log_handlers(THD* thd, uint log_type)
+{
+ lock();
+ reopen_log_table(log_type);
+ if (log_type == QUERY_LOG_GENERAL)
+ file_log_handler->mysql_log.open_query_log(opt_logname);
+ else
+ file_log_handler->mysql_slow_log.open_query_log(opt_slow_logname);
+ unlock();
+}
+
+
+void LOGGER::deactivate_log_handlers(THD* thd, uint log_type)
+{
+ TABLE_LIST *table_list;
+ if (log_type == QUERY_LOG_GENERAL)
+ table_list= &table_log_handler->general_log;
+ else
+ table_list= &table_log_handler->slow_log;
+ lock();
+ VOID(pthread_mutex_lock(&LOCK_open));
+ close_log_table(log_type, TRUE);
+ query_cache_invalidate3(thd, table_list, 0);
+ unlock_table_name(thd, table_list);
+ VOID(pthread_mutex_unlock(&LOCK_open));
+ if (log_type == QUERY_LOG_GENERAL)
+ file_log_handler->mysql_log.close(LOG_CLOSE_INDEX|LOG_CLOSE_STOP_EVENT);
+ else
+ file_log_handler->mysql_slow_log.close(LOG_CLOSE_INDEX|LOG_CLOSE_STOP_EVENT);
+ unlock();
+}
+
+
bool Log_to_csv_event_handler::flush(THD *thd, TABLE_LIST *close_slow_log,
TABLE_LIST *close_general_log)
{
+ TABLE_LIST *table_list= 0;
VOID(pthread_mutex_lock(&LOCK_open));
- close_log_table(QUERY_LOG_GENERAL, TRUE);
- close_log_table(QUERY_LOG_SLOW, TRUE);
- close_general_log->next_local= close_slow_log;
- query_cache_invalidate3(thd, close_general_log, 0);
- unlock_table_name(thd, close_slow_log);
- unlock_table_name(thd, close_general_log);
+ if (opt_general_log)
+ {
+ close_log_table(QUERY_LOG_GENERAL, TRUE);
+ table_list= close_general_log;
+ }
+ if (opt_slow_query_log)
+ {
+ close_log_table(QUERY_LOG_SLOW, TRUE);
+ if (!table_list)
+ table_list= close_slow_log;
+ else
+ table_list->next_local= close_slow_log;
+ }
+ if (table_list)
+ query_cache_invalidate3(thd, table_list, 0);
+ if (opt_general_log)
+ unlock_table_name(thd, close_general_log);
+ if (opt_slow_query_log)
+ unlock_table_name(thd, close_slow_log);
VOID(pthread_mutex_unlock(&LOCK_open));
- return reopen_log_table(QUERY_LOG_SLOW) ||
- reopen_log_table(QUERY_LOG_GENERAL);
+
+ if (opt_slow_query_log && reopen_log_table(QUERY_LOG_SLOW) ||
+ opt_general_log && reopen_log_table(QUERY_LOG_GENERAL))
+ return 1;
+ return 0;
}
/* the parameters are unused for the log tables */
bool Log_to_csv_event_handler::init()
{
- /* we always open log tables. even if the logging is disabled */
- return (open_log_table(QUERY_LOG_GENERAL) || open_log_table(QUERY_LOG_SLOW));
+ if (opt_general_log && open_log_table(QUERY_LOG_GENERAL))
+ return 1;
+ if (opt_slow_query_log && open_log_table(QUERY_LOG_SLOW))
+ return 1;
+ return 0;
}
int LOGGER::set_handlers(uint error_log_printer,
@@ -2979,6 +3038,8 @@ int error_log_print(enum loglevel level,
bool slow_log_print(THD *thd, const char *query, uint query_length,
time_t query_start_arg)
{
+ if (!opt_slow_query_log)
+ return 0;
return logger.slow_log_print(thd, query, query_length, query_start_arg);
}
@@ -2989,6 +3050,8 @@ bool general_log_print(THD *thd, enum en
va_list args;
uint error= 0;
+ if (!opt_general_log)
+ return 0;
va_start(args, format);
error= logger.general_log_print(thd, command, format, args);
va_end(args);
--- 1.390/sql/mysql_priv.h Fri Apr 7 12:13:20 2006
+++ 1.391/sql/mysql_priv.h Wed Apr 12 19:08:21 2006
@@ -1312,6 +1312,8 @@ extern ulong expire_logs_days, sync_binl
extern ulong opt_tc_log_size, tc_log_max_pages_used, tc_log_page_size;
extern ulong tc_log_page_waits;
extern my_bool relay_log_purge, opt_innodb_safe_binlog, opt_innodb;
+extern my_bool opt_general_log, opt_slow_query_log;
+extern ulong log_output_options;
extern uint test_flags,select_errors,ha_open_options;
extern uint protocol_version, mysqld_port, dropping_tables;
extern uint delay_key_write_options, lower_case_table_names;
--- 1.553/sql/mysqld.cc Mon Apr 3 13:25:22 2006
+++ 1.554/sql/mysqld.cc Wed Apr 12 19:08:21 2006
@@ -313,7 +313,6 @@ TYPELIB log_output_typelib= {array_eleme
/* the default log output is log tables */
static const char *log_output_str= "TABLE";
-static ulong log_output_options= LOG_TABLE;
static bool lower_case_table_names_used= 0;
static bool volatile select_thread_in_use, signal_thread_in_use;
static bool volatile ready_to_exit;
@@ -364,6 +363,7 @@ my_bool opt_safe_user_create = 0, opt_no
my_bool opt_show_slave_auth_info, opt_sql_bin_update = 0;
my_bool opt_log_slave_updates= 0;
my_bool opt_innodb;
+my_bool opt_general_log, opt_slow_query_log;
#ifdef WITH_INNOBASE_STORAGE_ENGINE
extern SHOW_VAR innodb_status_variables[];
extern uint innobase_init_flags, innobase_lock_type;
@@ -506,6 +506,7 @@ ulong thread_id=1L,current_pid;
ulong slow_launch_threads = 0, sync_binlog_period;
ulong expire_logs_days = 0;
ulong rpl_recovery_rank=0;
+ulong log_output_options= LOG_TABLE;
double log_10[32]; /* 10 potences */
time_t start_time;
@@ -4814,7 +4815,9 @@ enum options_mysqld
OPT_TABLE_LOCK_WAIT_TIMEOUT,
OPT_PLUGIN_DIR,
OPT_LOG_OUTPUT,
- OPT_PORT_OPEN_TIMEOUT
+ OPT_PORT_OPEN_TIMEOUT,
+ OPT_GENERAL_LOG,
+ OPT_SLOW_LOG
};
@@ -5050,6 +5053,9 @@ Disable with --skip-bdb (will save memor
"Set up signals usable for debugging",
(gptr*) &opt_debugging, (gptr*) &opt_debugging,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"general-log", OPT_GENERAL_LOG,
+ "Enable|disable general log", (gptr*) &opt_general_log,
+ (gptr*) &opt_general_log, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
#ifdef HAVE_LARGE_PAGES
{"large-pages", OPT_ENABLE_LARGE_PAGES, "Enable support for large pages. \
Disable with --skip-large-pages.",
@@ -5619,6 +5625,9 @@ replicating a LOAD DATA INFILE command."
"Tells the slave thread to continue replication when a query returns an error from the provided list.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
+ {"slow-query-log", OPT_SLOW_LOG,
+ "Enable|disable slow query log", (gptr*) &opt_slow_query_log,
+ (gptr*) &opt_slow_query_log, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"socket", OPT_SOCKET, "Socket file to use for connection.",
(gptr*) &mysqld_unix_port, (gptr*) &mysqld_unix_port, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -6937,6 +6946,7 @@ static void mysql_init_variables(void)
/* Things reset to zero */
opt_skip_slave_start= opt_reckless_slave = 0;
mysql_home[0]= pidfile_name[0]= log_error_file[0]= 0;
+ opt_general_log= opt_slow_query_log= 0;
opt_log= opt_update_log= opt_slow_log= 0;
opt_bin_log= 0;
opt_disable_networking= opt_skip_show_db=0;
@@ -7165,6 +7175,7 @@ get_one_option(int optid, const struct m
break;
case 'l':
opt_log=1;
+ opt_general_log=1;
break;
case 'h':
strmake(mysql_real_data_home,argument, sizeof(mysql_real_data_home)-1);
@@ -7350,6 +7361,7 @@ get_one_option(int optid, const struct m
#endif /* HAVE_REPLICATION */
case (int) OPT_SLOW_QUERY_LOG:
opt_slow_log= 1;
+ opt_slow_query_log= 1;
break;
#ifdef WITH_CSV_STORAGE_ENGINE
case OPT_LOG_OUTPUT:
@@ -7883,6 +7895,16 @@ static void get_options(int argc,char **
&global_system_variables.datetime_format))
exit(1);
+ if (!opt_log && opt_general_log)
+ {
+ sql_print_warning("General log is disabled. Option 'general-log' has no effect.");
+ opt_general_log= 0;
+ }
+ if (!opt_slow_log && opt_slow_query_log)
+ {
+ sql_print_warning("Slow query log is disabled. Option 'slow-query-log' has no effect.");
+ opt_slow_query_log= 0;
+ }
}
--- 1.179/sql/sql_delete.cc Thu Apr 6 16:44:20 2006
+++ 1.180/sql/sql_delete.cc Wed Apr 12 19:08:22 2006
@@ -927,7 +927,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST
if (!my_strcasecmp(system_charset_info, table_list->db, "mysql"))
{
if (!my_strcasecmp(system_charset_info, table_list->table_name,
- "general_log"))
+ "general_log") && opt_general_log)
{
lock_logger= 1;
logger.lock();
@@ -936,7 +936,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST
}
else
if (!my_strcasecmp(system_charset_info, table_list->table_name,
- "slow_log"))
+ "slow_log") && opt_slow_query_log)
{
lock_logger= 1;
logger.lock();
@@ -974,10 +974,10 @@ end:
unlock_table_name(thd, table_list);
VOID(pthread_mutex_unlock(&LOCK_open));
- if (closed_log_tables & QUERY_LOG_SLOW)
+ if (opt_slow_query_log && (closed_log_tables & QUERY_LOG_SLOW))
logger.reopen_log_table(QUERY_LOG_SLOW);
- if (closed_log_tables & QUERY_LOG_GENERAL)
+ if (opt_general_log && (closed_log_tables & QUERY_LOG_GENERAL))
logger.reopen_log_table(QUERY_LOG_GENERAL);
if (lock_logger)
logger.unlock();
--- 1.90/sql/share/errmsg.txt Tue Mar 21 00:41:16 2006
+++ 1.91/sql/share/errmsg.txt Wed Apr 12 19:08:21 2006
@@ -5826,3 +5826,5 @@ ER_NDB_CANT_SWITCH_BINLOG_FORMAT
eng "The NDB cluster engine does not support changing the binlog format on the fly yet"
ER_PARTITION_NO_TEMPORARY
eng "Cannot create temporary table with partitions"
+ER_CANT_CHANGE_LOG_VAR
+ eng "'%-.64s' is disabled. Cannot change '%-.64s' variable."
--- New file ---
+++ mysql-test/r/log_state.result 06/04/12 19:08:22
truncate table mysql.general_log;
truncate table mysql.slow_log;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
Variable_name Value
general_log OFF
log ON
log_slow_queries ON
slow_query_log OFF
flush logs;
set global general_log= ON;
create table t1(f1 int);
select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] 1 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] 1 1 Query select * from mysql.general_log
set global general_log= OFF;
drop table t1;
select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] 1 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] 1 1 Query select * from mysql.general_log
TIMESTAMP root[root] @ localhost [] 1 1 Query set global general_log= OFF
set global general_log= ON;
flush logs;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
Variable_name Value
general_log ON
log ON
log_slow_queries ON
slow_query_log OFF
set session long_query_time=1;
select sleep(2);
sleep(2)
0
select * from mysql.slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text
set global slow_query_log= ON;
set session long_query_time=1;
select sleep(2);
sleep(2)
0
select * from mysql.slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text
TIMESTAMP, root[root] @ localhost [] USER_HOST, QUERY_TIME 1 0 test 0 0 1 select sleep(2)
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
Variable_name Value
general_log ON
log ON
log_slow_queries ON
slow_query_log ON
set global general_log= ON;
set global general_log= OFF;
set global general_log= OFF;
set global slow_query_log= ON;
set global slow_query_log= OFF;
set global slow_query_log= OFF;
set global general_log= ON;
truncate table mysql.general_log;
create table t1(f1 int);
drop table t1;
select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] 1 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] 1 1 Query drop table t1
TIMESTAMP root[root] @ localhost [] 1 1 Query select * from mysql.general_log
set global general_log= OFF;
truncate table mysql.general_log;
select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument
set global general_log= ON;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
Variable_name Value
general_log ON
log ON
log_slow_queries ON
slow_query_log OFF
--- New file ---
+++ mysql-test/t/log_state-master.opt 06/04/12 19:08:22
--log-output=TABLE,FILE --log --general-log=0 --log-slow-queries --slow-query-log=0
--- New file ---
+++ mysql-test/t/log_state.test 06/04/12 19:08:23
-- source include/not_embedded.inc
--source include/have_csv.inc
--disable_ps_protocol
truncate table mysql.general_log;
truncate table mysql.slow_log;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
flush logs;
set global general_log= ON;
create table t1(f1 int);
--replace_column 1 TIMESTAMP
select * from mysql.general_log;
set global general_log= OFF;
drop table t1;
--replace_column 1 TIMESTAMP
select * from mysql.general_log;
set global general_log= ON;
flush logs;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
connect (con1,localhost,root,,);
connection con1;
set session long_query_time=1;
select sleep(2);
--replace_column 1 TIMESTAMP, 3 USER_HOST, 4 QUERY_TIME
select * from mysql.slow_log;
connection default;
set global slow_query_log= ON;
connection con1;
set session long_query_time=1;
select sleep(2);
--replace_column 1 TIMESTAMP, 3 USER_HOST, 4 QUERY_TIME
select * from mysql.slow_log;
disconnect con1;
connection default;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
set global general_log= ON;
set global general_log= OFF;
set global general_log= OFF;
set global slow_query_log= ON;
set global slow_query_log= OFF;
set global slow_query_log= OFF;
set global general_log= ON;
truncate table mysql.general_log;
create table t1(f1 int);
drop table t1;
--replace_column 1 TIMESTAMP
select * from mysql.general_log;
set global general_log= OFF;
truncate table mysql.general_log;
--replace_column 1 TIMESTAMP
select * from mysql.general_log;
set global general_log= ON;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
--enable_ps_protocol
--- 1.8/sql/log.h Wed Mar 29 16:27:31 2006
+++ 1.9/sql/log.h Wed Apr 12 19:08:21 2006
@@ -416,6 +416,7 @@ public:
class Log_to_file_event_handler: public Log_event_handler
{
+ friend class LOGGER;
MYSQL_LOG mysql_log, mysql_slow_log;
bool is_initialized;
public:
@@ -510,6 +511,8 @@ public:
void init_error_log(uint error_log_printer);
void init_slow_log(uint slow_log_printer);
void init_general_log(uint general_log_printer);
+ void deactivate_log_handlers(THD* thd, uint log_type);
+ void activate_log_handlers(THD* thd, uint log_type);
};
--- 1.93/mysql-test/r/show_check.result Mon Mar 6 14:35:33 2006
+++ 1.94/mysql-test/r/show_check.result Wed Apr 12 19:08:21 2006
@@ -148,14 +148,12 @@ flush tables;
show open tables;
Database Table In_use Name_locked
mysql general_log 1 0
-mysql slow_log 1 0
create table t1(n int);
insert into t1 values (1);
show open tables;
Database Table In_use Name_locked
-mysql general_log 1 0
-mysql slow_log 1 0
test t1 0 0
+mysql general_log 1 0
drop table t1;
create table t1 (a int not null, b VARCHAR(10), INDEX (b) ) AVG_ROW_LENGTH=10 CHECKSUM=1 COMMENT="test" ENGINE=MYISAM MIN_ROWS=10 MAX_ROWS=100 PACK_KEYS=1 DELAY_KEY_WRITE=1 ROW_FORMAT=fixed;
show create table t1;
@@ -568,23 +566,21 @@ SELECT 1 FROM mysql.db, mysql.proc, mysq
1
SHOW OPEN TABLES;
Database Table In_use Name_locked
-mysql proc 0 0
+mysql db 0 0
test urkunde 0 0
mysql time_zone 0 0
-mysql db 0 0
+mysql general_log 1 0
test txt1 0 0
-mysql slow_log 1 0
+mysql proc 0 0
test tyt2 0 0
-mysql general_log 1 0
mysql user 0 0
mysql time_zone_name 0 0
SHOW OPEN TABLES FROM mysql;
Database Table In_use Name_locked
-mysql proc 0 0
-mysql time_zone 0 0
mysql db 0 0
-mysql slow_log 1 0
+mysql time_zone 0 0
mysql general_log 1 0
+mysql proc 0 0
mysql user 0 0
mysql time_zone_name 0 0
SHOW OPEN TABLES FROM mysql LIKE 'u%';
@@ -598,16 +594,14 @@ test tyt2 0 0
mysql time_zone_name 0 0
SHOW OPEN TABLES LIKE '%o%';
Database Table In_use Name_locked
-mysql proc 0 0
mysql time_zone 0 0
-mysql slow_log 1 0
mysql general_log 1 0
+mysql proc 0 0
mysql time_zone_name 0 0
FLUSH TABLES;
SHOW OPEN TABLES;
Database Table In_use Name_locked
mysql general_log 1 0
-mysql slow_log 1 0
DROP TABLE txt1;
DROP TABLE tyt2;
DROP TABLE urkunde;
--- 1.181/sql/set_var.cc Wed Mar 29 16:27:31 2006
+++ 1.182/sql/set_var.cc Wed Apr 12 19:08:21 2006
@@ -649,6 +649,10 @@ sys_var_have_variable sys_have_row_based
/* Global read-only variable describing server license */
sys_var_const_str sys_license("license", STRINGIFY_ARG(LICENSE));
+/* Global variables which enable|disable logging */
+sys_var_log_state sys_var_general_log("general_log", &opt_general_log, QUERY_LOG_GENERAL);
+sys_var_log_state sys_var_slow_query_log("slow_query_log", &opt_slow_query_log, QUERY_LOG_SLOW);
+
#ifdef HAVE_REPLICATION
static int show_slave_skip_errors(THD *thd, SHOW_VAR *var, char *buff)
{
@@ -748,6 +752,7 @@ SHOW_VAR init_vars[]= {
{"ft_min_word_len", (char*) &ft_min_word_len, SHOW_LONG},
{"ft_query_expansion_limit",(char*) &ft_query_expansion_limit, SHOW_LONG},
{"ft_stopword_file", (char*) &ft_stopword_file, SHOW_CHAR_PTR},
+ {sys_var_general_log.name, (char*) &opt_general_log, SHOW_MY_BOOL},
{sys_group_concat_max_len.name, (char*) &sys_group_concat_max_len, SHOW_SYS},
{sys_have_archive_db.name, (char*) &have_archive_db, SHOW_HAVE},
{sys_have_berkeley_db.name, (char*) &have_berkeley_db, SHOW_HAVE},
@@ -943,6 +948,7 @@ SHOW_VAR init_vars[]= {
{sys_slave_trans_retries.name,(char*) &sys_slave_trans_retries, SHOW_SYS},
#endif
{sys_slow_launch_time.name, (char*) &sys_slow_launch_time, SHOW_SYS},
+ {sys_var_slow_query_log.name, (char*) &opt_slow_query_log, SHOW_MY_BOOL},
#ifdef HAVE_SYS_UN_H
{"socket", (char*) &mysqld_unix_port, SHOW_CHAR_PTR},
#endif
@@ -2455,6 +2461,42 @@ bool sys_var_key_cache_long::update(THD
end:
pthread_mutex_unlock(&LOCK_global_system_variables);
return error;
+}
+
+
+bool sys_var_log_state::check(THD *thd, set_var *var)
+{
+ if ((log_type == QUERY_LOG_SLOW && !opt_slow_log) ||
+ (log_type == QUERY_LOG_GENERAL && !opt_log))
+ {
+ my_error(ER_CANT_CHANGE_LOG_VAR, MYF(0),
+ log_type == QUERY_LOG_SLOW ? "SLOW QUERY LOG" : "GENERAL LOG",
+ name);
+ return 1; // log disabled, can not update variable
+ }
+ return check_enum(thd, var, &bool_typelib);
+}
+
+
+bool sys_var_log_state::update(THD *thd, set_var *var)
+{
+ my_bool tmp_val= (my_bool) var->save_result.ulong_value;
+ pthread_mutex_lock(&LOCK_global_system_variables);
+ if (!logger.is_log_tables_initialized ||
+ *value == tmp_val)
+ {
+ *value= (my_bool) tmp_val;
+ goto err;
+ }
+ if (!tmp_val)
+ logger.deactivate_log_handlers(thd, log_type);
+ else
+ logger.activate_log_handlers(thd, log_type);
+ *value= (my_bool) tmp_val;
+
+err:
+ pthread_mutex_unlock(&LOCK_global_system_variables);
+ return 0;
}
--- 1.84/sql/set_var.h Sun Feb 26 01:20:53 2006
+++ 1.85/sql/set_var.h Wed Apr 12 19:08:21 2006
@@ -718,6 +718,16 @@ public:
};
+class sys_var_log_state :public sys_var_bool_ptr
+{
+ uint log_type;
+public:
+ sys_var_log_state(const char *name_arg, my_bool *value_arg, uint log_type_arg)
+ :sys_var_bool_ptr(name_arg, value_arg), log_type(log_type_arg) {}
+ bool check(THD *thd, set_var *var);
+ bool update(THD *thd, set_var *var);
+};
+
/* Variable that you can only read from */
class sys_var_readonly: public sys_var
| Thread |
|---|
| • bk commit into 5.1 tree (gluh:1.2304) | gluh | 12 Apr |