在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况。

我们知道Mysql数据库导出可以使用命令mysqldump,使用方式可以通过在终端中输入mysqldump --help来查看。
简单的使用方式如下:
1. 导出整个数据库(包括数据库中的数据)
mysqldump -u username -p dbname > dbname.sql

2. 导出数据库结构(不含数据)
mysqldump -u username -p -d dbname > dbname.sql

3. 导出数据库中的某张数据表(包含数据)
mysqldump -u username -p dbname tablename > tablename.sql

4. 导出数据库中的某张数据表的表结构(不含数据)
mysqldump -u username -p -d dbname tablename > tablename.sql

我们可以用-w(或-where)指定备份条件。在使用过程中遇到一个问题,按时间导出时,导出的数据时“丢失”了一部分数据,并且时间与库中的不同。

例如我们有下面这个表:

CREATE TABLE `test_timestamp` (
`pk` int(20) unsigned NOT NULL AUTO_INCREMENT,
`record_time` timestamp NULL DEFAULT NULL COMMENT '记录日期',
PRIMARY KEY (`pk`),
KEY `time` (`record_time`)
) ENGINE=MyISAM AUTO_INCREMENT=564374307 DEFAULT CHARSET=utf8; INSERT INTO `test_timestamp` VALUES (1,'2016-08-04 16:00:00'),(2,'2016-08-04 20:00:00'),(3,'2016-08-05 00:00:00'),(4,'2016-08-05 04:00:00');

其中record_time为timestamp类型,在数据库中查询为:

mysql> SELECT * FROM iptv.test_timestamp;
+----+-----------------------------+
| pk | record_time |
+----+-----------------------------+
| | -- :: |
| | -- :: |
| | -- :: |
| | -- :: |
+----+-----------------------------+

我们将时间大于等于2016-08-05 00:00:00的数据导出:

mysqldump -u root -p iptv test_timestamp -w"record_time >= '2016-08-05 00:00:00' " > /home/test.sql

然后将其导入到原来的库中后再查询:

mysql> SELECT * FROM iptv.test_timestamp;
+----+-----------------------------+
| pk | record_time |
+----+-----------------------------+
| | -- :: |
| | -- :: |
+----+-----------------------------+
rows in set (0.00 sec)

发现只有两条数据。此时,如果我们查看导出的test.sql文件,发现里面只有两条记录:
(3,'2016-08-05 00:00:00'),
(4,'2016-08-05 04:00:00')

这与以前库中的记录相差8个小时。

原因就是在导出时,如果没有加其他选项,在我们的导出文件中有这样几行:
….
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
….
也就是说,在导出时,首先会将时区time_zone设置为'+00:00',而time_zone这个值在数据库中默认是什么呢:

mysql> show variables like '%time_zone%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+--------------------------+------------+
rows in set (0.00 sec)

是系统默认时区,查看系统默认时区:

[root@hadoop-data- /]# date -R
Thu, Aug :: +

所有我们的在导出数据时,时间会先做转换,然后再进行查询,转换后的记录为:
(1,'2016-08-04 16:00:00'),
(2,'2016-08-04 20:00:00'),
(3,'2016-08-05 00:00:00'),
(4,'2016-08-05 04:00:00');

按照 -w"record_time >= '2016-08-05 00:00:00' "过滤后只剩下:
(3,'2016-08-05 00:00:00'),
(4,'2016-08-05 04:00:00');

所以插入后只剩下两条数据了。

我们在按时间导出数据时需要注意这个问题。解决的方式一种是在-w参数中将时间自己进行转换,另外一种方式是先将需要导出的库的时区进行设置
set time_zone='+00:00';
导出结束后再恢复:
set time_zone='SYSTEM';

同时,如果导出和导入的库所使用 的时区不同,那么导入的只是时间显示就不一样,如果把两个库时区设置为一样,数值显示就相同了。所有当同样的数据在不同数据库中显示不同时,需要先确认一下时区的问题。

Mysql使用mysqldump按时间导出时的一个注意事项的更多相关文章

  1. MySql使用mysqldump 导入与导出方法总结

    导出数据库数据:首先打开cmd进入MySQL的bin文件夹下 1.导出education数据库里面的users表的表数据和表结构(下面以users表为例) mysqldump -u[用户名] -h[i ...

  2. mysqldump还原备份数据时遇到一个问题

    问题描述 ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = O ...

  3. 使用kbmmw smart service 属性时的一个注意事项

    kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道 ...

  4. SpringMVC处理跨域请求时的一个注意事项

        由于公司对SpingMVC框架里面的东西进行了扩展,在配置SpringMVC时没有使用<mvc:annotation-driven>这个标签.而且是自己手动来配置HandlerMa ...

  5. MySQL备份与恢复-mysqldump备份与恢复

    这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...

  6. MySQL mysqldump数据导出详解 --dump-slave 注意事项

    http://www.cnblogs.com/chenmh/p/5300370.html 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工 ...

  7. MySQL之 Mysqldump导出数据库

    参数大全 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导 ...

  8. MySQL中mysqldump导出数据的使用

    mysqldump常用参数说明: 帮助使用:mysqldump --help -A, --all-databases 导出全部数据库 mysqldump -uroot -p –A > /tmp/ ...

  9. MYSQL使用mysqldump导出某个表的部分数据

    命令格式如下: mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 例子: 从meteo数据库的sdata表中导出sen ...

随机推荐

  1. opacity背景层透明导致文字也透明

    如果想要文字和背景分开,即背景透明了,但是文字不影响 解决方法:高级浏览器用background:rgba();来解决 低级浏览器,给文字层加相对定位 http://www.360doc.com/co ...

  2. MYSQL低权限读文件

    技巧:Reading files in MySQL with file_priv = no. 当用户无权限调用load_file()函数的时候可以用以下方式读取文件内容: 1.建立test(不分配fi ...

  3. iOS安全—阻止tweak注入hook api

    http://blog.csdn.net/zcrong/article/details/51617348 在Other Linker Flags中添加: -Wl,-sectcreate,__RESTR ...

  4. ssi项目(1)环境搭建

    1.环境准备 导包(jdk1.8只支持spring4.0以上的版本) mysql驱动包 c3p0驱动包 mybatis包 spring-core.spring-aop.spring-web.sprin ...

  5. HTML中强大的input标签属性

    用了许久的html,<input>这个标签是最常用的标签之一. <input type="">标签中type属性是必不可少的,以往我最常用的有 type=& ...

  6. Django的单元测试

    1.单元测试框架 django-unittest https://docs.djangoproject.com/en/1.9/topics/testing/overview/#speeding-up- ...

  7. [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)

    Java针对类.成员变量.方法,有很多修饰符,例如public.private.static.final.synchronized.abstract等,这些修饰符用来控制访问权限或其他特性. 本文就用 ...

  8. linux内核学习之七 可执行程序的装载和运行

    一 程序的装载和运行的基本知识补充    1 当进程开始执行一个新的程序时,从父进程继承的所有页被释放,以便在新的用户地址空间开始执行新的计算,甚至进程的特权都可能发生改变,但是,进程的PID不会改变 ...

  9. SharePoint 2013 CSOM 对象模型属性包

     博客地址:http://blog.csdn.net/FoxDave 虽说是翻译,但是并没什么翻译的,主要内容就是说有一些能通过Server API配置的Site/Web属性在CSOM中找不到,其 ...

  10. 兼容性测试-如何使用IE11做低版本IE的兼容性测试

    操作步骤: 切换模式方法-按F12->展开显示->仿真菜单>在文档模式下拉框中选择IE版本