5.6 和 5.7 时区设置相同,select now()也显示当前时间
5.7 error log 中时间和当前时间差8小时
5.6 写 error log 函数如下
取时间的函数是localtime_r(&skr, &tm_tmp)
日志中时间和系统时区相同
- static void print_buffer_to_file(enum loglevel level, const char *buffer,
- size_t length)
- {
- time_t skr;
- struct tm tm_tmp;
- struct tm *start;
- DBUG_ENTER("print_buffer_to_file");
- DBUG_PRINT("enter",("buffer: %s", buffer));
- mysql_mutex_lock(&LOCK_error_log);
- skr= my_time(0);
- localtime_r(&skr, &tm_tmp);
- start=&tm_tmp;
- fprintf(stderr, "%d-%02d-%02d %02d:%02d:%02d %lu [%s] %.*s\n",
- start->tm_year + 1900,
- start->tm_mon + 1,
- start->tm_mday,
- start->tm_hour,
- start->tm_min,
- start->tm_sec,
- current_pid,
- (level == ERROR_LEVEL ? "ERROR" : level == WARNING_LEVEL ?
- "Warning" : "Note"),
- (int) length, buffer);
- fflush(stderr);
- mysql_mutex_unlock(&LOCK_error_log);
- DBUG_VOID_RETURN;
- }
5.7 写 error log 函数如下
取时间的函数是 make_iso8601_timestamp(my_timestamp)
- static void print_buffer_to_file(enum loglevel level, const char *buffer,
- size_t length)
- {
- DBUG_ENTER("print_buffer_to_file");
- DBUG_PRINT("enter",("buffer: %s", buffer));
- char my_timestamp[iso8601_size];
- my_thread_id thread_id= 0;
- /*
- If the thread system is up and running and we're in a connection,
- add the connection ID to the log-line, otherwise 0.
- */
- if (THR_THD_initialized && (current_thd != NULL))
- thread_id= current_thd->thread_id();
- make_iso8601_timestamp(my_timestamp);
- /*
- This must work even if the mutex has not been initialized yet.
- At that point we should still be single threaded so that it is
- safe to write without mutex.
- */
- if (error_log_initialized)
- mysql_mutex_lock(&LOCK_error_log);
- if (error_log_buffering)
- {
- // Logfile not open yet, buffer messages for now.
- if (buffered_messages == NULL)
- buffered_messages= new (std::nothrow) std::string();
- std::ostringstream s;
- s << my_timestamp << " " << thread_id;
- if (level == ERROR_LEVEL)
- s << " [ERROR] ";
- else if (level == WARNING_LEVEL)
- s << " [Warning] ";
- else
- s << " [Note] ";
- s << buffer << std::endl;
- buffered_messages->append(s.str());
- }
- else
- {
- fprintf(stderr, "%s %u [%s] %.*s\n",
- my_timestamp,
- thread_id,
- (level == ERROR_LEVEL ? "ERROR" : level == WARNING_LEVEL ?
- "Warning" : "Note"),
- (int) length, buffer);
- fflush(stderr);
- }
- if (error_log_initialized)
- mysql_mutex_unlock(&LOCK_error_log);
- DBUG_VOID_RETURN;
- }
make_iso8601_timestamp 中有代码段如下
参数 opt_log_timestamps 控制时间
- if (opt_log_timestamps == 0)
- gmtime_r(&seconds, &my_tm);
- else
- {
- localtime_r(&seconds, &my_tm);
opt_log_timestamps 对应 sys_vars.cc 中的 log_timestamps
取值 const char *timestamp_type_names[]= {“UTC”, “SYSTEM”, NullS};
log_timestamps = 0 时,日志中是 UTC 时区
log_timestamps = 1 时,日志中是 SYSTEM 时区
5.7 默认 log_timestamps = 0
set global log_timestamps = 1;
来源: http://mysql.taobao.org/monthly/2017/01/09/