【问题标题】:dropDatabase called on its own for all the databases in mongoDB with Replica Sets使用副本集为 mongoDB 中的所有数据库自行调用 dropDatabase
【发布时间】:2017-08-22 17:37:52
【问题描述】:

我们使用 mongoDB 作为生产数据库的 DBMS。我们为我们的数据库启用了 2 个副本集。

出乎意料的是,我们注意到我们生产中的两个数据库都已被删除。我们绝对确定没有人这样做。当我们查看日志时,我们注意到两个数据库上的 dropDatabase 确实被调用了。但是,我们找不到连接建立的任何日志语句。如果有人使用 mongo shell 或 bash 删除了数据库,那么也应该有新连接的日志。

Primary 的日志语句:

2017-08-17T14:38:47.019+0000 I -        [conn527] AssertionException handling request, closing client connection: 17132 SSL handshake received but server is started without SSL support
2017-08-22T00:18:22.694+0000 I COMMAND  [conn541] dropDatabase db1 starting
2017-08-22T00:18:22.708+0000 I COMMAND  [conn541] dropDatabase db1 finished
2017-08-22T00:18:23.832+0000 I COMMAND  [conn542] dropDatabase db2 starting
2017-08-22T00:18:23.843+0000 I COMMAND  [conn542] dropDatabase db2 finished 

从第一行的时间戳可以看出,最近5天没有与mongo服务器建立新的连接

有人可以帮助我们了解我们的 mongodb 服务器到底发生了什么。此外,任何指针将不胜感激。

【问题讨论】:

  • 要找出“谁”是连接 541,通过 mongodb 日志进行搜索(如果您有足够的日志文件)grep -R "\#541" *.log
  • 我们有过去 3 个月的日志,找不到任何连接 541 或 542。您能否给我们任何其他指针?
  • 这很奇怪,因为所有“从 x.x.x.x 接受的连接”事件都会正常记录。并且您的旧文件不是 'zip'(只是检查)。然后“某人”删除了这些行。
  • 确实很奇怪。我在运行 grep 之前解压缩了所有文件。让我感到困惑的是,两个 drop 查询的连接 ID 是不同的。如果有人未经授权访问了实例,他/她很可能删除了日志语句。但是,我不认为有人会为了稍后在数据库上运行 dropDatabase 而保持连接打开一周或更长时间。所以连接日志应该在同一个文件中。

标签: mongodb mongodb-replica-set drop-database


【解决方案1】:

如果您的实例仍在运行,您可以发出一个

db.adminCommand( { getLog: "global" } )

为了找出发生了什么。 getLog 命令从 RAM 而不是从日志文件中读取 MongoDB 日志——以防万一有人篡改了日志文件……

【讨论】:

  • 非常感谢您的建议。但是,我们之前已经重新启动了服务器。所以,恐怕这无济于事。你有什么其他的想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2014-08-06
相关资源
最近更新 更多