Mac下mongo使用随记

本文记录了在启动MongoDB数据库时遇到的错误信息及解决方案。主要问题是尝试在一个只读目录下创建锁文件,导致启动失败。解决方案为使用sudo命令以root权限启动MongoDB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错:
chenchaoqundemacs-MacBook-Air:db ccq$ mongod
2018-01-06T21:19:44.427+0800 I CONTROL [initandlisten] MongoDB starting : pid=3057 port=27017 dbpath=/data/db 64-bit host=chenchaoqundemacs-MacBook-Air.local
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] db version v3.4.10
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] git version: 078f28920cb24de0dd479b5ea6c66c644f6326e9
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2m 2 Nov 2017
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] allocator: system
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] modules: none
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] build environment:
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] distarch: x86_64
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] target_arch: x86_64
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] options: {}
2018-01-06T21:19:44.428+0800 I STORAGE [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
2018-01-06T21:19:44.428+0800 I NETWORK [initandlisten] shutdown: going to close listening sockets…
2018-01-06T21:19:44.428+0800 I NETWORK [initandlisten] shutdown: going to flush diaglog…
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] now exiting
2018-01-06T21:19:44.428+0800 I CONTROL [initandlisten] shutting down with code:100

需要root启动:sudo mongod

### 部署 MongoDB 分布式集群的详细步骤 在 Ubuntu 系统中通过 Docker 部署 MongoDB 分布式集群需要完成多个步骤,包括创建配置服务器、分片服务器、路由服务器,并确保它们能够正常通信。以下是详细的部署方法: --- #### 1. 创建 Docker 网络 为了使 MongoDB 的各个组件能够相互通信,首先需要创建一个自定义的 Docker 网络: ```bash docker network create mongo_cluster_net ``` --- #### 2. 启动配置服务器(Config Servers) 配置服务器存储元数据信息,通常需要至少三个节点以实现高可用性。以下命令启动三个配置服务器: ```bash docker run -d --name configsvr0 --network mongo_cluster_net \ -v /mnt/mongo/data/configsvr0/:/data/db/ \ -v /mnt/mongo/log/configsvr0/:/data/configdb/ \ mongo:5.0 mongod --configsvr --replSet rs_configsvr --bind_ip_all --port 27019 docker run -d --name configsvr1 --network mongo_cluster_net \ -v /mnt/mongo/data/configsvr1/:/data/db/ \ -v /mnt/mongo/log/configsvr1/:/data/configdb/ \ mongo:5.0 mongod --configsvr --replSet rs_configsvr --bind_ip_all --port 27019 docker run -d --name configsvr2 --network mongo_cluster_net \ -v /mnt/mongo/data/configsvr2/:/data/db/ \ -v /mnt/mongo/log/configsvr2/:/data/configdb/ \ mongo:5.0 mongod --configsvr --replSet rs_configsvr --bind_ip_all --port 27019 ``` 上述命令中,`--configsvr` 表示该实例是配置服务器[^3]。 --- #### 3. 初始化配置服务器副本集 进入其中一个配置服务器容器并初始化副本集: ```bash docker exec -it configsvr0 bash mongo --port 27019 <<EOF rs.initiate({ _id: "rs_configsvr", members: [ { _id: 0, host: "configsvr0:27019" }, { _id: 1, host: "configsvr1:27019" }, { _id: 2, host: "configsvr2:27019" } ] }) EOF ``` --- #### 4. 启动分片服务器(Shard Servers) 分片服务器存储实际的数据,通常也需要多个节点形成副本集。以下命令启动一个包含三个节点的分片副本集 `shard3`: ```bash docker run -d --name shard30 --network mongo_cluster_net \ -v /mnt/mongo/data/shard30/:/data/db/ \ -v /mnt/mongo/log/shard30/:/data/configdb/ \ mongo:5.0 mongod --shardsvr --replSet shard3 --bind_ip_all --port 27018 docker run -d --name shard31 --network mongo_cluster_net \ -v /mnt/mongo/data/shard31/:/data/db/ \ -v /mnt/mongo/log/shard31/:/data/configdb/ \ mongo:5.0 mongod --shardsvr --replSet shard3 --bind_ip_all --port 27018 docker run -d --name shard32 --network mongo_cluster_net \ -v /mnt/mongo/data/shard32/:/data/db/ \ -v /mnt/mongo/log/shard32/:/data/configdb/ \ mongo:5.0 mongod --shardsvr --replSet shard3 --bind_ip_all --port 27018 ``` 初始化分片副本集: ```bash docker exec -it shard30 bash mongo --port 27018 <<EOF rs.initiate({ _id: "shard3", members: [ { _id: 0, host: "shard30:27018" }, { _id: 1, host: "shard31:27018" }, { _id: 2, host: "shard32:27018" } ] }) EOF ``` --- #### 5. 启动路由服务器(Mongos) 路由服务器负责将客户端请求分发到正确的分片。以下命令启动一个路由服务器: ```bash docker run -d --name mongos0 --network mongo_cluster_net \ -p 27017:27017 \ mongo:5.0 mongos --configdb rs_configsvr/configsvr0:27019,configsvr1:27019,configsvr2:27019 --bind_ip_all ``` --- #### 6. 添加分片到集群 进入路由服务器容器并添加分片: ```bash docker exec -it mongos0 bash mongo <<EOF sh.addShard("shard3/shard30:27018") EOF ``` --- #### 7. 验证集群状态 可以通过以下命令检查集群的状态: ```bash docker exec -it mongos0 bash mongo <<EOF sh.status() EOF ``` --- #### 8. 设置用户权限(可选) 如果需要设置用户权限,可以参考以下命令: ```bash docker exec -it mongos0 bash mongo admin --port 27017 <<EOF use admin db.createUser({ user: "admin", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) EOF ``` --- ### 注意事项 - 确保所有容器都连接到同一个 Docker 网络 `mongo_cluster_net`。 - 配置文件和日志路径可以根据实际需求调整。 - 如果需要扩展集群,可以按照相同的步骤添加更多的分片或配置服务器。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值