MongoDB数据库备份

新项目用的时MongoDB的数据库,最近几天被数据库备份给弄的特别难受,不知道那个货设计的数据库表,尽然将图片转成Base64存储到了数据库中,更难受的是从来没有做过数据库的备份工作,也就是生产环境下只有一个数据库,如果挂掉将影响所有业务,每天操作数据库的时候那个小心呀,生怕把数据库给弄崩了,就成了千古罪人了。好在数据库还比较抗压,14G的数据没有将数据库给弄崩。不过整个过程太扯淡了。

数据库是运行在阿里云上的,如果通过mongodump命令做本地全备份,40G的磁盘不够用于是用用navicate客户端备份,查数据那个慢呀(心中一万个草尼玛)存图片的那张表没有建索引,本来想加索引来着,后台的同事说不能加,如果加了所有的后台代码都要改 ps:查一万多条数据要两个小时才能查出来,一个周末没干别的事情全用来查数据然后导数据了,女朋友说我还不如在公司加班呢,哎,宝宝心里苦呀。图片表中总共五万多条数据,一次导出的话navicate直接卡死,于是就按日期分段查询分段导出。这个过程真的痛苦,有一个月的数据特别多,好不容易导出了,再导入到之后要用的数据库中的时候电脑cpu直接爆掉,根本不给机会,于是又将数据分成半月的,结果还是不行。。。。。。,到底是谁设计的这个表呀,我XXX。算了工作还是要干的,就只能闷着头干了。最后一个月的数据分成了三段导出然后又导入的,这个时候感觉navicate还挺好用的,在暗自庆幸呢,虽然用了好久才完成导入导出,但是总归是完成任务了。完成之后随手看了一下数据,出现了如下图的变化。

一开始以为是日期格式变了,结果却是悲剧了。navicate导出数据的时候将bate转成了string。然后导出之后就默认成了string类型,于是我就想navicate能不能在导入数据的时候选定字段类型,结果还真可以。如下图字段类型确实可以。

心中暗喜,开开心心的导入数据之后发现,string转date的时候。数据都乱掉了,转完的date数据3755年的数据都有,我真的是醉了。不知道这是navicate的一个bug还是表中的数据格式有问题(感觉数据格式没有问题,因为项目已经投产了,用户没有反馈日期相关bug)。本来想string就string吧,后台代码中转换一下就行了,于是我又去问了我们后台的同事,他告诉我说:如果加上string转date的话要改的地方特别多........。

没辙只能换一个思路了,这个时候突然想起我用navicate备份数据库的时候,还采用了一个方案 用studio 3T做了一次全量的备份,耗时一整晚,于是我想实在不行就先把这个导入到之后要投产的数据库吧,大不了再用一晚上时间导入,于是就用studio 3T开始导入,意外的惊喜:导入比导出快很多,用了一个小时就导入进去了。ps:导出是从阿里云上导出到本地的,受网络带宽的影响,导入是从本地专网导入的。不知道是不是网络原因还是studio 3T本身导入就比导出要快。就这样用了一个多小时把数据导入到了数据库中,但是导入的数据是不全的,因为生成环境备份数据库是不停机的,也就是当时的全量库在此时就不全了。于是后半段产生的数据还要再次导入,可是我不清楚studio 3T是否能按照时间戳导出导入,于是网上各种百度,结果是相关的资料太少了。这个时候我想起了mongodump命令,mongodump导出所有数据会是阿里云磁盘占满,但是我可以用mongodump导出指定时间的呀,

mongodump -u 用户名 -p 用户密码 -d 数据库名 -c 集合名(表名) -q '{"created":{$gte:ISODate("2019-06-30T16:00:00Z")}}' -o /home/导出文件名.json

按照以上命令在mongodb数据库的bin文件夹下执行,会将2019.6.30之后的数据导出。执行之后真的成功了,很开心。然后就将导出的数据从阿里云上下载到了本地(PS:不得不说还是mongodump命令导数据快多了)。下载到本地之后发现导出时明明规定的是.json格式导出之后却成了bson格式,如果有大神知道,请赐教一下。

Bson格式:参考百科说明:BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据。

BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,

BSON有三个特点:轻量性、可遍历性、高效性。

然后就百度bson怎样转json格式 如下命令,在bson所属文件夹下执行如下命令:

bsondump collection.bson > collection.json

bson转成json之后文件大了一点,转换完成之后将json文件下载到本地,然后再通过studio 3T导入到数据库中,到此算是完成了数据的导入工作。

查看mongodb官方文档发现,mongodb有副本集概念,也就是数据库的高可用,类似于集群的概念吧,大概意思是:可以做多个节点,副节点会同步主节点数据,并保持一致。但主节点数据库宕机之后可以自动切换副节点,感觉挺好的,后续会找时间研究一下这个技术,以后的项目中肯定会用到。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪头的彩虹糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值