如何解析mysql的坑比时区问题

这期内容当中小编将会给大家带来有关如何解析MySQL的坑比时区问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

目前累计服务客户千余家,积累了丰富的产品开发及服务经验。以网站设计水平和技术实力,树立企业形象,为客户提供网站设计制作、网站设计、网站策划、网页设计、网络营销、VI设计、网站改版、漏洞修补等服务。成都创新互联始终以务实、诚信为根本,不断创新和提高建站品质,通过对领先技术的掌握、对创意设计的研究、对客户形象的视觉传递、对应用系统的结合,为客户提供更好的一站式互联网解决方案,携手广大客户,共同发展进步。

问题:mysqldump出来的文件迁移到另外的库,时间戳字段总是少8个小时!

1.看到这个很快就想到时区问题,我们先看一下

  1. mysql时区

  2. mysql> show variables like '%zone%';
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone | CST    |
    | time_zone        | SYSTEM |
    +------------------+--------+

  3. 系统时区

  4. [root@iZ2ze66bhrbxkc31nljgjnZ ~]# date -R
    Fri, 23 Jun 2017 16:06:46 +0800

  5. 很好没毛病

2.查看表结构

  1. MariaDB [ecejmaster]> desc svc_street_tmp_170623;
    +--------------+-------------+------+-----+-------------------+-----------------------------+
    | Field        | Type        | Null | Key | Default           | Extra                       |
    +--------------+-------------+------+-----+-------------------+-----------------------------+
    | street_id    | int(11)     | NO   |     | 0                 |                             |
    | city_id      | int(11)     | YES  |     | NULL              |                             |
    | street_name  | varchar(50) | NO   |     |                   |                             |
    | status       | tinyint(4)  | YES  |     | NULL              |                             |
    | create_user  | int(11)     | YES  |     | NULL              |                             |
    | create_time  | datetime    | NO   |     | CURRENT_TIMESTAMP |                             |
    | update_user  | int(11)     | YES  |     | NULL              |                             |
    | update_time  | datetime    | YES  |     | NULL              |                             |
    | del_flag     | tinyint(4)  | NO   |     | 0                 |                             |
    | screate_time | timestamp   | NO   |     | CURRENT_TIMESTAMP |                             |
    | supdate_time | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
    +--------------+-------------+------+-----+-------------------+-----------------------------+

3 查看数据

  1. MariaDB [ecejmaster]> select * from svc_street_tmp_170623  where street_id=17615 limit 1;

  2. +-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+

  3. | street_id | city_id | street_name | status | create_user | create_time | update_user | update_time | del_flag | screate_time | supdate_time |

  4. +-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+

  5. | 17615 | 69 | 123 | 2 | 1 | 2017-06-23 15:37:24 | 1 | 2017-06-23 15:37:24 | 0 | 2017-06-23 15:37:24 | 2017-06-23 15:38:36 |

  6. +-----------+---------+-------------+--------+-------------+---------------------+-------------+---------------------+----------+---------------------+---------------------+

  7. 1 row in set (0.00 sec)

4 备份

  1. [dbaadmin@YZ-PRO-DB-04 ~]$ mysqldump -udbmanager -p'12fAK1aR' -h 10.32.14.78 ecejmaster svc_street_tmp_170623 --where="street_id=17615" -t

  2. -- MySQL dump 10.15  Distrib 10.0.23-MariaDB, for Linux (x86_64)

  3. --

  4. -- Host: 10.32.14.78    Database: ecejmaster

  5. -- ------------------------------------------------------

  6. -- Server version       10.0.23-MariaDB-log

  7. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

  8. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

  9. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

  10. /*!40101 SET NAMES utf8 */;

  11. /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

  12. /*!40103 SET TIME_ZONE='+00:00'*/;

  13. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

  14. /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

  15. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

  16. --

  17. -- Dumping data for table `svc_street_tmp_170623`

  18. --

  19. -- WHERE: street_id=17615

  20. LOCK TABLES `svc_street_tmp_170623` WRITE;

  21. /*!40000 ALTER TABLE `svc_street_tmp_170623` DISABLE KEYS */;

  22. INSERT INTO `svc_street_tmp_170623` VALUES (17615,69,'123',2,1,'2017-06-23 15:37:24',1,'2017-06-23 15:37:24',0,'2017-06-23 07:37:24','2017-06-23 07:38:36');

  23. /*!40000 ALTER TABLE `svc_street_tmp_170623` ENABLE KEYS */;

  24. UNLOCK TABLES;

  25. /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */

----看到没,时间少了8个小时,仔细观察会发现timestamp时间戳会出现少8个小时的状况,datetime时间类型不会!插入到另外的库中,时间会再加8个小时,恢复正常

但是:如果dump时指定 -t  等参数(忽略了上面的set time_zone),再插回去就真的少8个小时了。刚好我们备份的全是insert语句,其它的信息全部去掉了

5 看下mysqldump的说明

  1. [dbaadmin@YZ-PRO-DB-04 ~]$ mysqldump --help | grep -i zone

  2.   --tz-utc            SET TIME_ZONE='+00:00' at top of dump to allow dumping of

  3.                       zones or data is being moved between servers with

  4.                       different time zones.

  5. 默认是以0时区来导出的,会对timestamp时间类型造成影响

6 解决办法:

  1. mysqldump -uroot -S /data/3306/mysql.sock -pHP2T9wypjr6oEZRV ecejmaster3 $i --compact -c -t --skip-extended-insert --skip-tz-utc   跳过时区

mysqldump会对timestamp时间类型的字段造成8个小时的误差,存insert时使用skip-tz-utc跳过时区的方式导出解决

上述就是小编为大家分享的如何解析mysql的坑比时区问题了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。

网页题目:如何解析mysql的坑比时区问题
网页地址:https://www.cdcxhl.com/article36/joojsg.html

成都网站建设公司_创新互联,为您提供自适应网站响应式网站定制网站网站营销网页设计公司静态网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

商城网站建设