summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <Administrador@light.>2003-01-27 15:37:25 -0200
committerunknown <Administrador@light.>2003-01-27 15:37:25 -0200
commit6958e3289dc956fbe660ce89bf41cb748fbc652f (patch)
treeeb4415abb8afbbe8500e432982ee080e69d41c54 /sql
parent48f587a8836bd0b4a8e98bc87a9b98133b58fef5 (diff)
downloadmariadb-git-6958e3289dc956fbe660ce89bf41cb748fbc652f.tar.gz
Added option hostname.err
sql/sql_parse.cc: added option hostname.err
Diffstat (limited to 'sql')
-rw-r--r--sql/log.cc46
-rw-r--r--sql/mysql_priv.h4
-rw-r--r--sql/mysqld.cc29
-rw-r--r--sql/set_var.cc1
-rw-r--r--sql/sql_parse.cc2
5 files changed, 78 insertions, 4 deletions
diff --git a/sql/log.cc b/sql/log.cc
index 58f5298dad0..df39adf1cbe 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -1568,3 +1568,49 @@ void sql_perror(const char *message)
perror(message);
#endif
}
+
+bool flush_error_log()
+{
+ bool result=0;
+ if (log_error_file[0] != '\0') /* --log-error="" */
+ {
+ char err_renamed[FN_REFLEN], *end;
+ end= strmake(err_renamed,log_error_file,FN_REFLEN-4);
+ strmov(end, "-old");
+#ifdef __WIN__
+ char err_temp[FN_REFLEN+4];
+ /*
+ On Windows is necessary a temporary file for to rename
+ the current error file.
+ */
+ strmov(strmov(err_temp, err_renamed),"-tmp");
+ (void) my_delete(err_temp, MYF(0));
+ if (freopen(err_temp,"a+",stdout))
+ {
+ freopen(err_temp,"a+",stderr);
+ (void) my_delete(err_renamed, MYF(0));
+ my_rename(log_error_file,err_renamed,MYF(0));
+ if (freopen(log_error_file,"a+",stdout))
+ freopen(log_error_file,"a+",stderr);
+ int fd, bytes;
+ char buf[IO_SIZE];
+ if ((fd = my_open(err_temp, O_RDONLY, MYF(0))) >= 0)
+ {
+ while ((bytes = (int) my_read(fd, (byte*) buf, IO_SIZE, MYF(0))) > 0)
+ my_fwrite(stderr, (byte*) buf, (uint) strlen(buf),MYF(0));
+ my_close(fd, MYF(0));
+ }
+ (void) my_delete(err_temp, MYF(0));
+ }
+ else
+ result= 1;
+#else
+ my_rename(log_error_file,err_renamed,MYF(0));
+ if (freopen(log_error_file,"a+",stdout))
+ freopen(log_error_file,"a+",stderr);
+ else
+ result= 1;
+#endif
+ }
+ return result;
+}
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 75bf4e97634..5a957514d28 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -627,6 +627,7 @@ extern uchar *days_in_month;
extern char language[LIBLEN],reg_ext[FN_EXTLEN];
extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN];
extern char pidfile_name[FN_REFLEN], time_zone[30], *opt_init_file;
+extern char log_error_file[FN_REFLEN];
extern char blob_newline;
extern double log_10[32];
extern ulonglong keybuff_size;
@@ -813,6 +814,9 @@ extern int sql_cache_hit(THD *thd, char *inBuf, uint length);
/* item.cc */
Item *get_system_var(enum_var_type var_type, LEX_STRING name);
+/* log.cc */
+bool flush_error_log(void);
+
/* Some inline functions for more speed */
inline bool add_item_to_list(Item *item)
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 5ddeb642340..24576ddbc9f 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -262,6 +262,7 @@ my_bool opt_reckless_slave = 0;
ulong back_log, connect_timeout, concurrency;
char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], time_zone[30];
+char log_error_file[FN_REFLEN];
bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
bool opt_disable_networking=0, opt_skip_show_db=0;
my_bool opt_enable_named_pipe= 0;
@@ -278,6 +279,7 @@ static my_string opt_logname=0,opt_update_logname=0,
static char* mysql_home_ptr= mysql_home;
static char* pidfile_name_ptr= pidfile_name;
+char* log_error_file_ptr= log_error_file;
static pthread_t select_thread;
static my_bool opt_noacl=0, opt_bootstrap=0, opt_myisam_log=0;
my_bool opt_safe_user_create = 0, opt_no_mix_types = 0;
@@ -2042,13 +2044,28 @@ int main(int argc, char **argv)
open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log",
NullS, LOG_NORMAL);
#ifdef __WIN__
-#define MYSQL_ERR_FILE "mysql.err"
if (!opt_console)
{
- freopen(MYSQL_ERR_FILE,"a+",stdout);
- freopen(MYSQL_ERR_FILE,"a+",stderr);
+#endif
+ if (log_error_file_ptr != log_error_file)
+ strmake(log_error_file, log_error_file_ptr, sizeof(log_error_file));
+ else
+ {
+ char *end;
+ uint length= ((end=strmake(log_error_file,
+ mysql_real_data_home,
+ FN_REFLEN-5)) -
+ log_error_file);
+ *strxnmov(end, sizeof(log_error_file)-length-1,
+ glob_hostname, ".err", NullS)= '\0';
+ }
+ if (log_error_file[0] != '\0')
+ if (freopen(log_error_file, "a+", stdout))
+ freopen(log_error_file, "a+", stderr);
+#ifdef __WIN__
}
#endif
+
if (ha_init())
{
sql_print_error("Can't init databases");
@@ -2964,7 +2981,8 @@ enum options {
OPT_INNODB_FORCE_RECOVERY,
OPT_BDB_CACHE_SIZE,
OPT_BDB_LOG_BUFFER_SIZE,
- OPT_BDB_MAX_LOCK
+ OPT_BDB_MAX_LOCK,
+ OPT_ERROR_LOG_FILE
};
@@ -3253,6 +3271,9 @@ struct my_option my_long_options[] =
{"pid-file", OPT_PID_FILE, "Pid file used by safe_mysqld",
(gptr*) &pidfile_name_ptr, (gptr*) &pidfile_name_ptr, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"log-error", OPT_ERROR_LOG_FILE, "Log error file",
+ (gptr*) &log_error_file_ptr, (gptr*) &log_error_file_ptr, 0, GET_STR,
+ REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"port", 'P', "Port number to use for connection.", (gptr*) &mysql_port,
(gptr*) &mysql_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"reckless-slave", OPT_RECKLESS_SLAVE, "For debugging", 0, 0, 0, GET_NO_ARG,
diff --git a/sql/set_var.cc b/sql/set_var.cc
index a7692cbe73a..b4e243019bc 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -491,6 +491,7 @@ struct show_var_st init_vars[]= {
{sys_net_write_timeout.name,(char*) &sys_net_write_timeout, SHOW_SYS},
{"open_files_limit", (char*) &open_files_limit, SHOW_LONG},
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
+ {"log_error", (char*) log_error_file, SHOW_CHAR},
{"port", (char*) &mysql_port, SHOW_INT},
{"protocol_version", (char*) &protocol_version, SHOW_INT},
{sys_read_buff_size.name, (char*) &sys_read_buff_size, SHOW_SYS},
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 0b6170f1e37..1778fca8019 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3407,6 +3407,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables)
mysql_slow_log.new_file(1);
if (ha_flush_logs())
result=1;
+ if (flush_error_log())
+ result=1;
}
#ifdef HAVE_QUERY_CACHE
if (options & REFRESH_QUERY_CACHE_FREE)