最近发现很多人对MySQL错误日志和慢日志中打印的时间疑问比较大,操作系统和数据库配置的时区是正确的,为什么错误日志和慢日志中的时区显示慢了8个小时?
一、问题原因
首先把问题原因说清楚,然后再详细介绍下MySQL涉及时区配置的参数。
原因是因为MySQL控制error 、slow、general日志中输出的时区控制参数是使用单独的参数控制,由log_timestamps参数控制且该参数默认值为UTC;
如果该参数没有配置,使用UTC时区那么打印的日志中的时间就会比北京时间(CST)慢8个小时;所以这就是为什么经常有人疑惑,操作系统和数据库中查询出的时间都没有问题,但错误日志、慢日志中打印的时间就是比北京时间慢了8个小时的原因。
二、MySQL时区配置参数
MySQL数据库时区由system_time_zone、default_time_zone、time_zone、log_timestamps 参数来控制,log_timestamps参数已经了解为专控制error 、slow、general日志中输出的时区;那么其他的参数又是控制的哪些时间中时区输出的呢?
2.1 system_time_zone
服务器系统时区。服务器启动时如果没有显示配置会使用服务器的时区默认配置,该设置被用于运行服务器的账户环境或启动脚本修改;建议显示配置为本地时区。
2.2 default_time_zone 和time_zone
default_time_zone 为服务器启动参数配置,用来配置time_zone;如果未指定,使用系统默认配置(和system_time_zone保持一致)
time_zone服务器配置参数,用来配置服务器时区,同时每个连接的客户端初始化时区;默认值为system(即和system_timne_zone保持一致)。
time_zone建议显示配置为指定时区,如果设置为 SYSTEM
,则每个需要进行时区计算的 MySQL 函数调用都会调用系统库来确定当前系统时区。此调用可能受全局互斥锁保护,从而导致争用。
三、问题总结
在设置数据库时区的时候,建议将时区参数配置为指定的时区,同时别忘了将日志的输出时区参数设置为指定时区。
防止不了解的人对错误日志和慢日志的输出时间产生质疑。

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。