有一个项目,需要使用线上数据库的数据,不想让第三方看到完整的数据,要求每个表之存放指定条数的数据,这个可以使用下面命令满足要求!
mysqldump -u root -pXXXX --default-character-set=utf8 web20 --where '1=1 limit 1000'
mysqldump where条件的解析为:Dump only rows selected by the given WHERE condition. Quotes around the condition are mandatory if it contains spaces or other characters that are special to your command interpreter.
解决办法
#使用--skip-tz-utc,不使用mysqldump默认的中时区。
mysqldump --default-character-set=utf8 -q --master-data=2 --single-transaction --databases test --tables t1 --where "time='2018-12-10 22:16:08'" -uroot -p123456 --skip-tz-utc>beifen.sql
#数据完全正确,文件头部无时区转换,所以数据恢复时正常。
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (11,'2018-12-10 22:16:08');
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
3总结
在使用mysqldump备份含有timestamp类型列的表时,需要指定--skip-tz-utc选项,否则可能会导致备份数据异常。(推荐使用datetime,与时区无关且存储范围更大,可以避免一些问题。)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!