mongdb遭遇勒索,用备份进行数据恢复

1、背景

某台MongoDB服务器,没有配置用户名密码,放到公网不到一天,遭到删库勒索

All your data is a backed up. You must pay 0.05 BTC to 1K4DdqZ7sWUkhtfRqAGi7VcRck3itcNH17 48 hours for recover it. After 48 hours expiration we will sell all your data on dark markets and the database dump will be dropped from our server!You can buy bitcoin here, https://localbitcoins.com or https://buy.moonpay.io/ After paying write to us in the mail with your DB IP: rambler+1kgup@onionmail.org and you will receive a link to download your database dump.

2、查找是否有备份,发现存在JSON格式数据备份

[
{
"_id": "5d17452d5548b118d86ee882",
"A_id": "636974317259022022",
"ArtCard_MaxSize": "0",
"AuthorName": "xxx作者",
"Create_time": "29/6/2019 11:02:05.902",
"Email": "aaaa@163.com",
"EndDate": "21/12/2025 16:00:00",
"Goods_footer_img": "/upload/xxx.jpg",
"Goods_header_img": "/upload/xxx.jpg",
"StartDate": "21/12/2019 16:00:00",
"Userhead": "/upload/xxx.jpg",
"Username": "aaaa",
},
{
"_id": "5f4b40ac7341f020cb5ebfa8",
"A_id": "637343928761936160",
"ArtCard_MaxSize": "0",
"AuthorName": "xxx作者",
"Create_time": "29/6/2019 11:02:05.902",
"Email": "aaaa@163.com",
"EndDate": "21/12/2025 16:00:00",
"Goods_footer_img": "/upload/xxx.jpg",
"Goods_header_img": "/upload/xxx.jpg",
"StartDate": "21/12/2019 16:00:00",
"Userhead": "/upload/xxx.jpg",
"Username": "aaaa",
},

3.、尝试用“mongoimport”导入数据

mongoimport  --uri="mongodb://user:user_pwd@127.0.0.1:27017/DBManage" -c "userInfo"  --file="C:\userInfo.json"

报错如下:

Failed: error unmarshaling bytes on document #0: JSON decoder out of sync

原因为,导入JSON为数组,需要添加参数“mongoimport --jsonArray”

再次导入:

mongoimport  --uri="mongodb://user:user_pwd@127.0.0.1:27017/DBManage" -c "userInfo" --jsonArray  --file="C:\userInfo.json"

导入成功,但发现程序不能跑,查看数据,发现日期格式并未导入成预期格式:

预期的格式
{
"A_id": NumberLong(636974317259022022),
"Create_time" : ISODate("2019-06-24T16:27:14.537Z"),
"StartDate" : ISODate("2019-06-24T16:00:00.537Z"),
"EndDate" : ISODate("2019-06-24T16:00:00.537Z"),
} 数据库里的格式
{
"A_id": "636974317259022022",
"Create_time" : "24/6/2019 16:27:14.537",
"StartDate": "21/12/2019 16:00:00",
"EndDate": "21/12/2025 16:00:00",
}

4、PyCharm开起来,修正数据格式【Date/Long/Array】,并插入数据库

import json
import datetime
import pymongo #备份JSON文件所在目录
basePath = "C:\JSON" myclient = pymongo.MongoClient("mongodb://127.0.0.1:27017")
mydb = myclient["DBManage"]
tabAdmin_userInfo = mydb["userInfo_Test"] strJson = ""
with open(basePath + '\\userInfo.json', encoding='utf8') as file:
strJson = file.read() str_json = str(strJson) jsonList = json.loads(str_json) newJsonList = []
for ite in jsonList:
for ke in ite.keys():
# String转成ISO Date
if ke in ["Create_time", "StartDate", "EndDate","Sale_time"] and ite[ke] is not None:
dateTimeValue = ite[ke]
dateFor = None
# "24/6/2019 16:27:14.537" 格式转换成 ISODate("2019-06-24T16:27:14.537Z")
if "." in dateTimeValue:
dateFor = datetime.datetime.strptime(dateTimeValue, '%d/%m/%Y %H:%M:%S.%f')
else:
dateFor = datetime.datetime.strptime(dateTimeValue, '%d/%m/%Y %H:%M:%S')
print(dateTimeValue, dateFor, dateFor.time())
ite[ke] =dateFor # String转成Long ,python3 后long和int 都为int()转换
if ke in ["A_id", "C_id", "New_id", "P_id","Join_userId"]:
ite[ke] = int( ite[ke]) # String转成ISO Date
if ke in ["UserType"]:
#"636974317259022022" 转换成 NumberLong(636974317259022022)
ite[ke]=int(ite[ke]) # String转成对象
if ke in ["Goods_Detail_image"]:
ite[ke]=json.loads(ite[ke]) print(ite)
#按条插入数据库
insREs = tabAdmin_userInfo.insert_one(ite)
print(insREs)

查看userInfo_Test表数据,并和userInfo 表数据对比,userInfo_Test 表数据达到预期要求;

删除userInfo表,将userInfo_Test表重命名为userInfo,测试应用

应用正常运行,此次应急完成

mongdb遭遇勒索,用备份进行数据恢复的更多相关文章

  1. 帝国CMS备份出现数据恢复不完整的问题

    今天linux主机中毒了,把用帝国备份王备份之后,恢复了快照到刚建主机的状态: 哎,只怪当初没有勤快的去做快照啊: 重新配置好后: 开始使用帝国备份王: 数据恢复之后,打开文章,提示"附加表 ...

  2. mongdb的索引及备份

    1. mongodb的索引 1.1 为什么mongdb需要创建索引 加快查询速度 进行数据的去重 1.2 mongodb创建简单的索引方法 语法: db.集合.ensureIndex({属性:1}), ...

  3. mysql数据库的备份与数据恢复

    一.定时备份数据库  前段时间工作中搭建了HttpRunnerManager的接口自动化测试平台,由于平台中没有提供用例下载的功能及权限管理功能,自己也不会写前端,于是就想了办法,那就是备份数据库,如 ...

  4. linux mysql自动备份 和 数据恢复

    1.写一个脚本:/root/mysql_backup.sh vim /root/mysql_backup.sh #!/bin/bashbackupdir=/data/mysql_backup   ti ...

  5. 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口

     1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...

  6. MySQL备份及数据恢复

    昨天MySQL意外挂了,重启不成功.然后悲剧的发现,之前做的磁盘快照规则也不知怎么没有生效,数据无备份. 后来咨询.搜索,结果: 1.可以配置两个参数,忽略检查,启动,可以读数据.然后导出,删除文件库 ...

  7. Mysql DBA 运维 MySQL数据库索引优化及数据丢失案例 MySQL备份-增量备份及数据恢复基础实战 MySQL数据库生产场景核心优化

    需要的联系我,QQ:1844912514

  8. 云HBase备份恢复,为云HBase数据安全保驾护航

    摘要: 介绍了阿里云HBase自研备份恢复功能的基本背景以及基本原理架构和基本使用方法.   云HBase发布备份恢复功能,为用户数据保驾护航.对大多数公司来说数据的安全性以及可靠性是非常重要的,如何 ...

  9. Sql Server数据库备份和恢复:原理篇

    本文与您探讨为什么Sql Server有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的Sql ...

  10. Cassandra 备份 - 1 - 节点镜像恢复

    之前比较关注如何使用Cassandra,但是真正想大规模使用前提还是需要搞清楚备份机制,确保数据安全. 本文主要内容来自文档 "Cassandra2.2"的翻译.最后部分为真实操作 ...

随机推荐

  1. python3使用libpcap库进行抓包及数据处理

    python版本:python 3.9 libpcap版本:1.11.0b7 python libpcap库是底层绑定c语言libpcap库的开发包,旨在提供python应用可访问的unix c li ...

  2. freeswitch的mod_curl模块

    概述 有时候,我们需要在呼叫的过程中,或过程后调用web api接口. freeswitch的mod_curl模块可以很方便的实现web api的接口调用. mod_curl模块默认不安装,需要进入模 ...

  3. 如何通过Java导出带格式的 Excel 数据到 Word 表格

    在Word中制作报表时,我们经常需要将Excel中的数据复制粘贴到Word中,这样则可以直接在Word文档中查看数据而无需打开另一个Excel文件.但是如果表格比较长,内容就会存在一定程度的丢失,无法 ...

  4. 利用KubeEdge在A500部署边缘推理任务

      利用KubeEdge在A500部署边缘推理任务 目  录 1 环境介绍... 1 2 云端环境部署... 2 2.1 在master节点安装Docker和k8S (ubuntu) 2 2.1.1 ...

  5. 求10以内所有偶数和-Java

    public class Demo{ //求10以内所有偶数和 public static void main (String[] args){ int sum = 0; for(int i = 0; ...

  6. 数据结构高阶--AVL(平衡二叉树)(图解+实现)

    AVL树(平衡二叉树) 概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下.因此为了解决这个问题,两位俄罗斯的数学家发明 ...

  7. Java框架--SSM&Oracle&Maven高级

    〇.内容介绍 一.MyBatis01:框架概述.环境搭建及入门案例.自定义框架 1.介绍 框架:封装细节,是开发中的解决方案 三层架构与SSM的关系 表示层web:SpringMVC框架 业务层ser ...

  8. Java 中 String 与 StringBuffer 和 StringBuilder 的区别

    简介: String 是 Java 中很常用的类之一,同时,字符串是 Java 面试中最重要的话题之一. StringBuffer 和 StringBuilder 类提供了操作字符串的方法. 我们将研 ...

  9. angr_ctf——从0学习angr(二):状态操作和约束求解

    状态操作 angr中提到的状态(state)实际上是一个Simstate类,该类可由Project预设得到.预设完成后,还可以根据需要对某些部分进行细化操作. 一个state包含了程序运行到某个阶段时 ...

  10. MySQL存储 pymysql模块

    目录 pymysql模块 基本使用 cursor=pymysql.cursors.DictCursor 获取数据 fetchall 移动光标 scroll 增删改二次确认 commit autocom ...