记一次被真·删库的经历

November 27, 2017 • 日常

没错,天天被我们调侃的删库跑路被我怕碰见了...

是这样的。

最近再给客户做一个网上商城,因为原来去找过他们学校的开发做过,后来客户感觉功能比较少,又因为他们学校的开发平时课比较多,所以找到我们来做一个全新的商城,开发周期为40天。

与删库无关的备份

原来的开发用的是mongoDB,而我们用的是mysql,因为考虑到两边的开发对表的构造不同,所以直接又买了一台服务器,开始开发的时候改了ssh密码,备份了原来的mongoDB数据库。

从mongo转移到mysql

  1. 先从mongoDB中导出表结构
mongoexport -d temp -c userInfo -o /home/hades/userInfo.json --type json -f id,name,phone,address

-d 数据库名称
-c 数据表名称
--type 导出格式:csv || json
-f 导出哪些字段

若未开启认证(mongodb.conf中未开启authorization: enabled)则不需要-u -p 参数。

  1. 导入到mysql中

Google了很久也没有找到合适的导入方式,最后还是利用Python一条一条的写入进去的。

import json
import sys

import MySQLdb
reload(sys)
sys.setdefaultencoding("utf-8")

conn = MySQLdb.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='root',
    db='temp',
    use_unicode=True,
    charset="utf8"
)
cur = conn.cursor()
cur.execute("set names utf8")
for line in open("/Users/hades/userInfo.json"):
    arr = json.loads(line)
    if (arr.get('id')):
        cur.execute("INSERT INTO user_list(id,name,phone,address,count) VALUES ('" + str(arr.get('id', " ")) + "','" +
                str(arr.get('name', " ")) + "','" + str(arr.get('phone', " ")) + "'," + str(arr.get('address', '')) + "')")

cur.close()
conn.commit()
conn.close()

先备份之后的被删库

导入完毕之后,我们就再也没有登录原来的服务器,直到前天早上,客户打电话说用户数据都没有了。

赶快起床查看了服务器,登入数据库,发现数据库已经只剩一个空壳了...

第一反应是有人登录了ssh进行的操作?查看了一下ssh登录日志,发现倒数几条没有异常,都是我上次备份数据库时登录的。

Jietu20171127-185435.jpg

于是查看mongoDB的日志,发现了登录记录,使用Robomongo客户端登录的,也就解释了为什么ssh没有登录日志了:

Jietu20171127-185740@2x.jpg

粗略的往下翻了翻,终于找到了为什么数据库空掉的原因:

Jietu20171127-185859@2x.jpg

没错,被删库了...又返回去看了一下日志,发现在删库之前给做了备份。

Jietu20171127-190301@2x.jpg

于是赶快把备份的数据库做了一个本地备份。

备份整个数据库

mongodump -h localhost -d temp -o /bak/temp

恢复数据库

再导入到了原来的数据库:

mongorestore -h localhost -d temp --drop ./bak/temp/

恢复指定数据表

但是发现一个有2w的数据只导入了7000条就失败了,考虑到只有这个表有问题,于是选择了手动导入:

mongoimport -h loaclhost -d xkoto -c card --upsert --drop ./bak/temp/userInfo.bson

真·被删库

为了保障数据库再次被修改,我改了admin库的密码,心里想着应该不会再被删库了吧。

然而第二天早上,客户又打来电话说小程序又不能用了!

于是又一次查看了mongoDB的操作日志,果不其然,又被删库了,只不过,这次没做备份,还删掉了admin库,莫非是不想让我们进入数据库?

Jietu20171130-162146@2x.jpg
Jietu20171130-162154@2x.jpg
Jietu20171130-162201@2x.jpg

后来一想,明明昨天改了admin的密码,为什么还是能够进行登录,然后就找啊找,在登录日志里看到了登录的用户,他在原来的表里新增了一个root权限用户,昨天我只是更改了admin库里的用户,没注意原来的库还有一个高权限的用户...

我的锅。

好吧,估计是删库的那个人也想不到竟然有人给恢复了,这次直接把昨天备份的数据库和原来的数据库给删掉了。幸亏昨天把数据备份到了本地,直接恢复到了昨天晚上的状态。

还好,丢失了只是最近24个小时的数据,客户那边说影响应该不大。

所以,定时备份真的很重要!还有,好端端的为什么删库...

Tags: None
9 条评论
  1. 哇。人心险恶

  2. 这就很恶意了诶…

    1. @特殊字符Alan对哦,毕竟数据无价@(小红脸)

  3. 一个有目的有计划的删库@(滑稽)估计是报复

    1. @SangSir#(想一想) 好像也是

  4. 所以现在知道是那个人删库的嘛

    1. @千千只知道一个IP也不确定是谁#(不说话)

  5. 会不会是上一个开发的报复

    1. @zkl2333这个真的不好说#(无奈)

Leave a Comment