mysqldump 根据timestamp 导数据不准确

2023-02-08  本文已影响0人  青水山

场景:导出5月1号的数据

mysqldump -uroot -h 10.2.17.158 -p --where="up_time>='2019-05-01 00:00:00' and up_time<='2019-05-01 23:59:59'" db_account charge >charge.sql

结果:数据有5月2号的数据

解决方法:

mysqldump -uroot -h 10.2.17.158 -p --where="up_time>='2019-05-01 00:00:00' and up_time<='2019-05-01 23:59:59'" --skip-tz-utc db_account charge >charge.sql

原因:

在导出时,首先会将时区time_zone设置为'+00:00',而time_zone这个值在数据库中默认是

mysql> show variables like'%time_zone%';

+| Variable_name | Value |

| system_time_zone | CST |

| time_zone | SYSTEM 

|+--------------------------+------------+

2rowsinset (0.00sec)

系统默认是东八区

date-R

Thu, 25Aug201616:25:06+0800

导出时,会先对数据库中的记录转换(减去8个小时)

在source 导入时,又会根据东八区 对数据进行加8操作。 导致看到的数据不对,包含了5月2号的数据。

注:在原库中统计,结果是没有问题的。

参数:--skip-tz-utc,只会影响 timestamp 字段的导入导出,对 datetime 时间字段不会影响

使用当前 mysql 服务器的时区进行导出

上一篇下一篇

猜你喜欢

热点阅读