Commit 90cd712b authored by Rucha Deodhar's avatar Rucha Deodhar

MDEV-27087: Add thread ID and database / table, where the error occured

to SQL error plugin

New plugin variable "with_db_and_thread_info" is added which prints the
thread id and databse name to the logfile. the value is stored in variable
"with_db_and_thread_info"

log_sql_errors() is responsible for printing in the log. If detailed is
enabled, print thread id and database name both, otherwise skip it.
parent 4ef9c9bb
# Purpose:
# Print first LINES_TO_READ from a file.
# The environment variables SEARCH_FILE and LINES_TO_READ must be set
# before sourcing this routine.
# Use:
# When the test is slow ( example because of ASAN build) then it
# may not flush the lines when 'cat' command is called and the
# test could fail with missing lines. Hence this can be used to
# to print first N lines.
#
perl;
use strict;
my $search_file = $ENV{SEARCH_FILE} or die "SEARCH_FILE not set";
my $lines_to_read = $ENV{LINES_TO_READ} or die "LINES_TO_READ not set";
open(FILE, '<', $search_file) or die "Can't open file $search_file: $!";
my $line_count = 0;
while ($line_count < $lines_to_read and my $line = <FILE>)
{
print $line;
$line_count++;
}
close(FILE);
EOF
show variables like 'sql_error_log%';
Variable_name Value
sql_error_log_filename sql_errors.log
sql_error_log_rate 1
sql_error_log_rotate OFF
sql_error_log_rotations 9
sql_error_log_size_limit 1000000
sql_error_log_with_db_and_thread_info ON
set global sql_error_log_rate=1;
select * from t_doesnt_exist;
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
THREAD_ID DATABASE_NAME TIME HOSTNAME ERROR 1146: Table 'test.t_doesnt_exist' doesn't exist : select * from t_doesnt_exist
...@@ -8,6 +8,7 @@ sql_error_log_rate 1 ...@@ -8,6 +8,7 @@ sql_error_log_rate 1
sql_error_log_rotate OFF sql_error_log_rotate OFF
sql_error_log_rotations 9 sql_error_log_rotations 9
sql_error_log_size_limit 1000000 sql_error_log_size_limit 1000000
sql_error_log_with_db_and_thread_info OFF
set global sql_error_log_rate=1; set global sql_error_log_rate=1;
select * from t_doesnt_exist; select * from t_doesnt_exist;
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
......
--plugin-load-add=$SQL_ERRLOG_SO --sql-error-log-with-db-and-thread-info=1
--source include/not_embedded.inc
if (!$SQL_ERRLOG_SO) {
skip No SQL_ERROR_LOG plugin;
}
show variables like 'sql_error_log%';
set global sql_error_log_rate=1;
--error ER_NO_SUCH_TABLE
select * from t_doesnt_exist;
let $MYSQLD_DATADIR= `SELECT @@datadir`;
--let SEARCH_FILE= $MYSQLD_DATADIR/sql_errors.log
--let LINES_TO_READ=1
--replace_regex /[1-9]* test [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [^E]*/THREAD_ID DATABASE_NAME TIME HOSTNAME /
--source include/read_head.inc
remove_file $MYSQLD_DATADIR/sql_errors.log;
...@@ -39,6 +39,7 @@ static unsigned int rate; ...@@ -39,6 +39,7 @@ static unsigned int rate;
static unsigned long long size_limit; static unsigned long long size_limit;
static unsigned int rotations; static unsigned int rotations;
static char rotate; static char rotate;
static char with_db_and_thread_info;
static unsigned int count; static unsigned int count;
LOGGER_HANDLE *logfile; LOGGER_HANDLE *logfile;
...@@ -67,12 +68,19 @@ static MYSQL_SYSVAR_STR(filename, filename, ...@@ -67,12 +68,19 @@ static MYSQL_SYSVAR_STR(filename, filename,
"The file to log sql errors to", NULL, NULL, "The file to log sql errors to", NULL, NULL,
"sql_errors.log"); "sql_errors.log");
static MYSQL_SYSVAR_BOOL(with_db_and_thread_info, with_db_and_thread_info,
PLUGIN_VAR_READONLY | PLUGIN_VAR_OPCMDARG,
"Show details about thread id and database name in the log",
NULL, NULL,
0);
static struct st_mysql_sys_var* vars[] = { static struct st_mysql_sys_var* vars[] = {
MYSQL_SYSVAR(rate), MYSQL_SYSVAR(rate),
MYSQL_SYSVAR(size_limit), MYSQL_SYSVAR(size_limit),
MYSQL_SYSVAR(rotations), MYSQL_SYSVAR(rotations),
MYSQL_SYSVAR(rotate), MYSQL_SYSVAR(rotate),
MYSQL_SYSVAR(filename), MYSQL_SYSVAR(filename),
MYSQL_SYSVAR(with_db_and_thread_info),
NULL NULL
}; };
...@@ -93,12 +101,24 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)), ...@@ -93,12 +101,24 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)),
count = 0; count = 0;
(void) localtime_r(&event_time, &t); (void) localtime_r(&event_time, &t);
logger_printf(logfile, "%04d-%02d-%02d %2d:%02d:%02d " if (with_db_and_thread_info)
{
logger_printf(logfile, "%llu %s %04d-%02d-%02d %2d:%02d:%02d "
"%s ERROR %d: %s : %s \n",
event->general_thread_id, event->database.str, t.tm_year + 1900,
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
event->general_user, event->general_error_code,
event->general_command, event->general_query);
}
else
{
logger_printf(logfile, "%04d-%02d-%02d %2d:%02d:%02d "
"%s ERROR %d: %s : %s\n", "%s ERROR %d: %s : %s\n",
t.tm_year + 1900, t.tm_mon + 1, t.tm_year + 1900, t.tm_mon + 1,
t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
event->general_user, event->general_error_code, event->general_user, event->general_error_code,
event->general_command, event->general_query); event->general_command, event->general_query);
}
} }
} }
} }
...@@ -157,7 +177,7 @@ maria_declare_plugin(sql_errlog) ...@@ -157,7 +177,7 @@ maria_declare_plugin(sql_errlog)
0x0100, 0x0100,
NULL, NULL,
vars, vars,
"1.0", "1.1",
MariaDB_PLUGIN_MATURITY_STABLE MariaDB_PLUGIN_MATURITY_STABLE
} }
maria_declare_plugin_end; maria_declare_plugin_end;
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