【MySQL】DTS机制对触发器时间的影响
案例背景
背景:
- 源库A 通过 dts的sync服务 同步一张表 到目标库B(表B1)
- 目标库B同时通过触发器实现:
- 当表B1 insert时,触发器触发该记录同时写入B2
- B2 比 B1多了两个时间字段,且为datetime格式
- 多的两个时间字段值通过触发器NOW函数生成写入
问题:
- 两个时间字段的时间都少8小时
DTS 对日期的处理逻辑
1. dts 会把源库日期相关的数据转换为0时区的值
2. 然后在写入目标端时设置session time_zone为0时区,这样不管源库目标库设置的是什么时区都可以以统一的方式处理,这也是一种标准的处理方式,
a. 例如binlog中设置的时区就是0时区。
b. 注意不同时区只影响时间的表示形式,并不影响存入数据库的二进制值(timestamp类型是这样)
c. 但是datetime这个类型比较特殊,在mysql中基本等同于字符串类型,所以在不同时区下datetime类型的值的意义发生了变化,使用不当会导致源库目标库的值不一致,这个和dts无关。
触发器的联动逻辑
● now() 函数实现