Nodejs连接mongodb失败. mongod 启动报错. [结贴]

Nodejs连接mongodb失败. mongod 启动报错. [结贴]

service mongod start 以后就报下面的错误.

Starting mongod: Wed May 29 16:32:31.518 
Wed May 29 16:32:31.518 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Wed May 29 16:32:31.518 
about to fork child process, waiting until server is ready for connections.
forked process: 17684
all output going to: /var/log/mongo/mongod.log
ERROR: child process failed, exited with error number 100
                                                           [失败]

谁知道这是为什么呢?

找到原因了 google半天 发现说是没有正常关闭mongod服务,导致mongod被锁. 删除掉mongod里的mongod.lock 文件. 重新启动服务就行了.


8 回复

Node.js 连接 MongoDB 失败,mongod 启动报错

问题描述

在尝试启动 mongod 服务时遇到了错误信息,导致无法正常运行 MongoDB。具体错误信息如下:

Starting mongod: Wed May 29 16:32:31.518 
Wed May 29 16:32:31.518 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Wed May 29 16:32:31.518 
about to fork child process, waiting until server is ready for connections.
forked process: 17684
all output going to: /var/log/mongo/mongod.log
ERROR: child process failed, exited with error number 100
                                                           [失败]

解决方法

经过一番搜索和调试,发现这个问题通常是由于 MongoDB 未正常关闭导致的,这会使得 MongoDB 在下次启动时出现锁文件 (mongod.lock) 的问题。

步骤:
  1. 删除锁文件

    • 锁文件通常位于 MongoDB 数据目录中。
    • 你可以通过以下命令找到数据目录的位置(默认为 /data/db/):
      sudo find / -name mongod.lock
      
    • 然后删除该锁文件:
      sudo rm /path/to/mongod.lock
      
  2. 重启 MongoDB 服务

    • 删除锁文件后,可以尝试重启 MongoDB 服务:
      sudo service mongod restart
      

示例代码

确保你的 Node.js 应用能够正确连接到 MongoDB,可以使用 mongodb 包来连接数据库。以下是一个简单的示例代码:

const { MongoClient } = require('mongodb');

async function main() {
    const uri = "mongodb://localhost:27017"; // MongoDB 的连接 URI
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Connected successfully to server");
        
        const db = client.db("testdb"); // 替换为你自己的数据库名
        const collection = db.collection("testcollection"); // 替换为你自己的集合名
        
        // 插入文档
        const doc = { name: "John Doe", age: 30 };
        const result = await collection.insertOne(doc);
        console.log(`Inserted document with _id: ${result.insertedId}`);
        
    } catch (err) {
        console.error(err);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

总结

  • 检查锁文件:确保 MongoDB 的锁文件被删除。
  • 重启服务:删除锁文件后重启 MongoDB 服务。
  • 连接测试:使用 Node.js 应用程序连接 MongoDB 并进行基本操作测试。

希望这些步骤和代码能帮助你解决问题!


求 解救啊 ~~~~~

多谢啊~被困扰了许久,刚刚接触mongodb~

It’s my pleasure

自己写个脚本每次启动删除lock文件

mongod.lock在哪?没找到。

data/db 文件夹在系统根目录 mongo 没有权限访问,你需要 sudo mongod 执行,mongo 才有权限访问。

根据你的描述,问题在于 mongod 在启动时遇到了一个错误,提示子进程失败并退出,错误编号为100。这种问题通常是由于 MongoDB 进程没有正确关闭,导致残留的锁定文件(mongod.lock)存在,从而阻止了新的实例启动。

解决方法

解决此问题的方法是删除残留的锁定文件 mongod.lock,然后重启 mongod 服务。以下是具体步骤:

  1. 找到并删除锁定文件

    • 锁定文件通常位于 MongoDB 数据目录下。
    • 例如,如果你的数据目录是 /var/lib/mongodb,那么锁定文件路径可能是 /var/lib/mongodb/mongod.lock
    sudo rm /var/lib/mongodb/mongod.lock
    
  2. 重启 mongod 服务

    • 使用以下命令重启 MongoDB 服务。
    sudo service mongod restart
    
  3. 验证 mongod 是否正常运行

    • 检查日志文件或使用以下命令确认服务是否正常启动。
    sudo tail -f /var/log/mongodb/mongod.log
    

示例代码

如果你正在编写 Node.js 应用程序,并且需要确保 MongoDB 已经成功连接,可以使用以下示例代码:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
.then(() => console.log('MongoDB connected'))
.catch(err => console.error('Failed to connect to MongoDB:', err));

解释

  • mongoose.connect 方法用于连接到 MongoDB 数据库。
  • useNewUrlParseruseUnifiedTopology 是用来确保兼容性和避免警告信息。
  • 如果连接成功,会在控制台输出 “MongoDB connected”,如果连接失败,则会捕获错误并在控制台输出错误信息。

通过上述步骤,你应该能够解决 mongod 启动失败的问题,并正常连接到 MongoDB 数据库。

回到顶部