【问题标题】:How to repair my mongodb?如何修复我的mongodb?
【发布时间】:2023-03-22 20:10:01
【问题描述】:

我似乎无法连接到已作为 Windows 服务安装在本地计算机上的 Mongo DB。我还构建了一个与 MongoDB 通信的小型 WPF 应用程序。 错误信息:

错误:无法连接到服务器 127.0.0.1 shell/mongo.js:8 4 异常:连接失败 检测到不干净的关机。

【问题讨论】:

  • 我做了相同的应用程序架构:WPF 应用程序和 MongoDb 作为“本地数据库”,我得出结论,由于这个问题,MongoDb 不适合这种应用程序,而仅适用于高度可靠的服务器-侧平台。否则,您将经常遇到此问题。最好选择 LiteDb 或 Mini-Biggy 等替代方案。

标签: mongodb


【解决方案1】:

您应该使用--repair 标志启动它。

mongod --repair

修复完成后,停止这个并正常启动。 Documentation on --repair option.

【讨论】:

  • 如果修复失败并且 mongod 响应损坏的数据文件异常,请删除 mongod.lock 文件以及损坏的 mongo 数据文件并再次运行 mongod --repair。使用这种方法显然会丢失数据,但至少可以再次启动 mongod。
【解决方案2】:

更快:

sudo rm /data/db/mongod.lock
sudo mongod --dbpath /data/db --repair
sudo mongod --dbpath /data/db

【讨论】:

  • 谢谢!使用带有 --repair 标志的 --dbpath 选项对我有用。我在“不干净的关机”(无论这意味着什么)方面遇到了同样的问题,当我尝试修复时,我收到一条错误消息,指出未找到默认的“\data\db”目录。这是意料之中的,因为我正在使用单独的位置来存储我的日志和数据。我只是将 --dbpath 设置为我的自定义位置并工作。我还没有确认,但我的猜测是我可以使用 --config "mongodb\mongod.cfg" 和 --repair 标志让 MongoDB 使用我的自定义设置。奇怪的是,修复后它没有从该文件中读取。
  • @Shejo284 对于 Windows,命令将为 mongod.exe --dbpath "C:\path\to\data" --repair。如果你得到“不干净的关闭”错误,然后从 cmd 运行 mongod,然后按 ctrl-C 干净地关闭,然后运行该命令。
  • 它有效,应该通过grep dbPath /etc/mongod.conf找到dbpath
  • 在使用 sudo 时要小心锁定文件的所有者。
  • 我爱你。经过 3 小时的努力,你救了我。
【解决方案3】:

如果你以 root 用户进行修复操作,请确保之后所有的 db 文件都归 mongodb 用户所有,否则 mongodb 将无法启动

chown -R mongodb:mongodb /data/db
rm /data/db/mongod.lock
/etc/init.d/mongodb start

【讨论】:

    【解决方案4】:
    $ mongo 
    > use dbname
    > db.repairDatabase()
    

    注意 --repair 功能也可以在 shell 中使用 db.repairDatabase() 帮助程序进行 repairDatabase 命令。

    另见http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/

    【讨论】:

    • 第一行是否打算作为脚本示例?然后在它们前面加上 4 个空格以格式化为代码而不是列表。
    • 嗨,我知道这是一个非常古老的问题和答案。顺便说一句,对于仍然来到这个地方的任何人,并且您未能使用 --repair 修复损坏的收藏品,主要是为了所有权和一切,这个魔法非常有效。
    【解决方案5】:

    如果您在 Ubuntu 上使用 official MongoDB repo 而不是默认软件包,则接受的答案将不起作用

    mongod 命令默认使用/data/db 作为default dbPath config setting,而/etc/mongodb.conf 使用/var/lib/mongodb 作为路径。所以如果你只做mongod --repair,它会尝试修复/data/db的数据库,这是错误的路径。

    我还发现如果你以root用户身份执行mongod,任何创建的文件都将归root所有,所以你需要以mongodb用户身份执行修复。

    这就是我最终为使其正常工作所做的:

    sudo chown -R mongodb: /var/lib/mongodb # Just to make sure permissions are correct
    sudo -u mongodb mongod --dbpath /var/lib/mongodb --repair
    sudo service mongodb start
    

    【讨论】:

      【解决方案6】:

      编写如下命令,我认为它会解决问题:

      cd data/
      
      rm -rf mongod.lock*
      
      cd ..
      
      mongod --repair
      
      ./mongod
      

      【讨论】:

        【解决方案7】:

        按照此步骤重新启动您的 mondoDB

        1、杀死所有mongod正在运行的进程

        要强制杀死在端口 27017(mongodb 的默认端口)上运行的每个进程

        lsof -n -i4TCP:27017 其中 27017 是进程所在的端口号 运行在

        这将返回进程 id(PID) 并运行

        kill -9 "PID" 将 PID 替换为运行后得到的数字 第一个命令

        2、使用mongod命令重启mongo

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-29
          • 1970-01-01
          • 2012-08-23
          • 2017-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多