您的位置:首页 > 数据库 > MySQL

MySQL中几个关于时间/时区的变量

2018-01-11 21:10 393 查看

一、log_timestamps

1.1、官方解释

log_timestamps: Log timestamp format. Added in MySQL 5.7.2.
This variable controls the timestamp time zone of error log messages, and of general query log and slow query log messages written to files. It does not affect the time zone of general query log and slow query log messages written to tables.
Permitted log_timestamps values are UTC (the default) and SYSTEM (local system time zone).

简单来说log_timestamps变量控制着error log、general log、slow log这些文件中的时间信息。log_timestamps有效的值为UTC(默认)和SYSTEM(本地系统时区)

1.2、使用样例

可以使用下面方式设置log_timestamps

# mysqld_safe --timezone
shell> /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my.cnf --timezone=UTC &
shell> /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3308/my.cnf --timezone=MET &
影响的是system_time_zone变量,主从复制,statement格式下,now()复制到从库
2018-01-10 07:41:17->2018-01-10 08:41:17

# mysqld --default-time-zone
shell> /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my.cnf --default-time-zone=+6:00 &
shell> /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my.cnf --default-time-zone=+8:00 &
影响的是time_zone变量,主从复制,statement格式下,now()复制到从库
2018-01-10 13:50:33->2018-01-10 13:50:33

原因:mysqld_safe --timezone参数,在从库的binlog可以看到
SET TIMESTAMP=1515570077;
SET @@session.time_zone='SYSTEM'; #会根据system_time_zone中的时区去设置
insert ... select now();

mysqld --default-time-zone参数,在从库的binlog可以看到
SET TIMESTAMP=1515570633;
SET @@session.time_zone='+06:00'; #直接复制主库,时间不会变化
insert ... select now();

# time_zone、timestamp对now()的影响
mysql> set time_zone='+6:00';set timestamp=1515570633;select now();
mysql> set time_zone='+8:00';set timestamp=1515570633;select now();
# 恢复timestamp
mysql> set timestamp=0;select now();

# timezone_name需要手动load
mysql> SELECT CONVERT_TZ('2018-01-10 12:00:00','+8:00','+6:00');
mysql> SELECT CONVERT_TZ('2018-01-10 12:00:00','US/Eastern','US/Central');
mysql> SELECT FROM_UNIXTIME(1515570633),UNIX_TIMESTAMP(now());


View Code
可以看出只有主、从设置system_time_zone后,之前的潜在问题才会按我们预期的结果显示~

四、参考文档

MySQL Server Time Zone Support:https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html
Replication and System Functions:https://dev.mysql.com/doc/refman/5.7/en/replication-features-functions.html
Replication and Time Zones:https://dev.mysql.com/doc/refman/5.7/en/replication-features-timezone.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: