Mysql使用mysqldump按时间导出时的一个注意事项
在使用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按时间导出时的一个注意事项的更多相关文章
- MySql使用mysqldump 导入与导出方法总结
导出数据库数据:首先打开cmd进入MySQL的bin文件夹下 1.导出education数据库里面的users表的表数据和表结构(下面以users表为例) mysqldump -u[用户名] -h[i ...
- mysqldump还原备份数据时遇到一个问题
问题描述 ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = O ...
- 使用kbmmw smart service 属性时的一个注意事项
kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道 ...
- SpringMVC处理跨域请求时的一个注意事项
由于公司对SpingMVC框架里面的东西进行了扩展,在配置SpringMVC时没有使用<mvc:annotation-driven>这个标签.而且是自己手动来配置HandlerMa ...
- MySQL备份与恢复-mysqldump备份与恢复
这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...
- MySQL mysqldump数据导出详解 --dump-slave 注意事项
http://www.cnblogs.com/chenmh/p/5300370.html 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工 ...
- MySQL之 Mysqldump导出数据库
参数大全 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导 ...
- MySQL中mysqldump导出数据的使用
mysqldump常用参数说明: 帮助使用:mysqldump --help -A, --all-databases 导出全部数据库 mysqldump -uroot -p –A > /tmp/ ...
- MYSQL使用mysqldump导出某个表的部分数据
命令格式如下: mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 例子: 从meteo数据库的sdata表中导出sen ...
随机推荐
- share登录Samba可读可写(适合虚拟机下学习使用)
直接配置 smb.conf ( path = /etc/samba/smb.conf ). 首先,进入到 samba 文件夹: cd /etc/samba/ 备份 smb.conf: mv smb.c ...
- ASP.NET MVC自定义ActionResult实现文件压缩
有时候需要将单个或多个文件进行压缩打包后在进行下载,这里我自定义了一个ActionResult,方便进行文件下载 using System; using System.Collections; usi ...
- C++ 为什么拷贝构造函数参数必须为引用?赋值构造函数参数也必须为引用吗?
之前写拷贝构造函数的时候,以为参数为引用,不为值传递,仅仅是为了减少一次内存拷贝.然而今天看到一篇文章发现自己对拷贝构造的参数理解有误. 参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导 ...
- android 解析XML 工具类
/** * Created by John on 2016/3/29. */ public class XmlParser { private static final String ns = nul ...
- 使用Mulesoft建立webservice, jax-ws方式, wsdl first
先创建wsdl,然后生成class 1. 下载 HRData.xsd 和 HRDataService.wsdl http://yunpan.cn/Q4zBXC4fvC74xhttp://yunpan. ...
- IOS 使用wxsqlite3为sqlite3数据库加密
1,下载wxsqlite3 地址http://jaist.dl.sourceforge.net/project/wxcode/Components/wxSQLite3/wxsqlite3-3.1.1. ...
- jQuery是什么?
jQuery就是javascript的一个库,把我们常用的一些功能进行了封装,方便我们来调用,提高我们的开发效率. 极大地简化了 JavaScript 编程. Javascipt跟jQuery的区别: ...
- ASP.NET 缓存技术分析
缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以大 ...
- 移动测试主要使用的测试框架,基于python
1.uiautomator google自己的测试框架,可以跨应用测试, 语言支持java,python也可以在GitHub上找到封装的包,去调用uiautomator. 2.Robotium jav ...
- Java和eclipse常用操作
eclipse: ctrl+F10 显示行号 ctrl+shift+F 自动对齐 ctrl+/ 注释 java: jar包: Manifest-Version - 指定清单文件的版本号 Main-Cl ...