- N +

mysqldump的tz-utc选项激发的MySQL时区后果

  在应用mysqldump备份过滤timestamp字段数据时,检查就按导出的文本文件,发明数据与在server端检查的数据不不合

  操作系统

  centos7.4 MySQL5.7.24

  注:下面敕令输入了+0800表现东八区,也就是我们国家的时间。相反,假设是-0800表现美国旧金山地点的时区,西八区。我们在装置系统的时分,假设地区选择了Asia/Shanghai,那么系统的时区就是东八区。

  MySQL

  注:

  The system_time_zone variable differs from time_zone. Although they might have the same value, the latter variable is used to initialize the time zone for each client that connects.

  Note:If set to SYSTEM, every MySQL function call that requires a timezone calculation makes a system library call to determine the current system timezone. This call may be protected by a global mutex, resulting in contention.

  关于时间的几个规范,以下所示:

  注:我们国家逾越了东五区、东六区、东七区、东八区、东九区五个时区,通俗都一致采取东八区计不时间。

  注:tzselect敕令只通知你选择的时区的写法,其实不会掉效。你可以在.profile、.bash_profile或许/etc/profile中设置准确的TZ情况变量并导出。 例如在.bash_profile外面设置 TZ=’Asia/Shanghai'; export TZ并使其掉效。

  例子,将系统时区设置为东九区(日本时间)

  在/usr/share/zoneinfo/下面有很多时区文件(跟tzselect显示的一样),可以复制这些时区文件掩饰/etc/localtime文件,或修改符号链接/etc/locatime对应的文件。

  注:假设有时分,履行了下面敕令后,应用date -R发明时区设置没有掉效,有能够是因为你在profile或.bash_profile外面设置了TZ。

  修改完需求重启MySQL

  mysqldump默许开启tz-utc,应用UTC作为默许时区;当MySQL server时区不为UTC时,会出现timestamp字段数据不不合;如MySQL server应用的是CST,那么mysqldump导出时间出现-8小时状况。

  网上有文章是说在默许time_zone=system下,应用timestamp字段在少量恳求时激发的CPU SYS高的后果。https://mp.weixin.qq.com/s/AtyaIP92L6KnZFB9bQA3ug

  大年夜约意思就是讲,关于应用timestamp的场景,MySQL在访问timestamp字段时会做时区转换,当time_zone设置为system时(默许),MySQL访问每行的timestamp字段时,都邑经过libc的时区函数,获得Linux设置的时区,在这个函数中会持有mutex,当少量并发SQL需求访问timestamp字段时,会出现mutex竞争。MySQL访问每行都邑做这个时区转换,转换完后释放mutex,一切等待这个mutex的线程全部唤醒,结果又会只要一个线程会胜利持有mutex,其他又会再次sleep,如许就会招致context switch十分高但qps很低,系统吞吐量急剧降低。

返回列表
上一篇:上一篇:龙骨机-伟嘉机械-隔墙龙骨机
下一篇:下一篇:没有了