场景:导出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 服务器的时区进行导出
网友评论