我用自制程序设置了 mongo。
$ brew services start mongodb-community
$ mongosh
我可以在 mongo compass 中看到我的数据库。
我想在副本集中运行此数据库。但我不知道怎么办。
我尝试使用 run-rs 包。但没有成功。
我安装了该软件包。
$ npm install run-rs -g
然后我跑了
run-rs,
但失败了:
$ run-rs --mongod
Purging database...
Running 'mongod' [ 27017, 27018, 27019 ]
Starting replica set...
Error: failed to start mongod with options [
'--port=27017',
'--dbpath=/Users/projectpath/backend/data/27017',
'--bind_ip=localhost',
'--replSet=rs'
]
于是,我停止了 MongoDB。
$ brew services stop mongodb-community
我又跑了
run-rs
。
$ run-rs --mongod
Purging database...
Running 'mongod' [ 27017, 27018, 27019 ]
Starting replica set...
Started replica set on "mongodb://localhost:27017,localhost:27018,localhost:27019?replicaSet=rs"
Connected to oplog
(node:28395) [MONGODB DRIVER] DeprecationWarning: collection.find option [oplogReplay] is deprecated and will be removed in a later version.
(Use `node --trace-deprecation ...` to show where the warning was created)
但这在我的项目目录中创建了一个包含许多文件的
data
文件夹。我不想在我的目录中出现一堆项目文件。这些文件是预期的吗?如果是这样,这些文件应该去哪里?如何将它们放入正确的目录?为什么它的行为不像我的其他 mongo 设置?
现在我之前在 mongo compass 中拥有的所有 DB 都消失了。如果我杀死所有 mongo 进程,我就可以回复他们
$ ps wuax | grep mongo
$ kill (pid number)
然后运行:
$ brew services start mongodb-community
但是我怎样才能让我的常规 mongo 社区使用副本集呢?为什么当我运行
run-rs
时我的 mongo DB 消失了?为什么run-rs
在我的项目目录下放了很多文件?
我是否想念这是如何工作的?
更新
我尝试添加自制程序路径。
$ run-rs 5.0.6 --dbpath '/opt/homebrew/var/mongodb'
数据文件夹现在尚未添加到我的项目中。但第一张图片中显示的我的旧数据库不再在 Mongo Compass 中。现在,当我切换到
brew services start mongodb-community
时,我所有的开发数据库似乎都被删除了。
似乎一旦您开始工作,它就会清除您的数据库数据,因此您似乎无法使用旧数据库数据运行副本集,而无需将其保存在某处并将其复制回来。看来你还必须关闭你的自制 mongo。我不太确定我在说什么,但这就是我让它发挥作用的方式。
我设置了run-rs
并且必须重新播种我的开发数据库。
这是我设置本地副本集的方法:已关闭
run-rs
mongo-community
$ brew services stop mongodb-community
)和我的mongo版本(run-rs
)安装并运行'/opt/homebrew/var/mongodb'
。当我运行 5.0.6
而不是 run-rs --mongod
时,Mongo Compass 给了我一个错误,即使两者的版本都是 5.0.6。
run-rs 5.0.6
然后我运行我的种子文件并在 uri 处填充一个新数据库:
$ npm install run-rs -g
$ run-rs 5.0.6 --dbpath '/opt/homebrew/var/mongodb'
# if you don't want to purge the database add the flag --keep
确保将 mongodb://127.0.0.1:27017/wtdev-local?replicaSet=rs
添加到您的 URI。
注意我过去一直错误地运行
replicaSet=rs
或 mongo 的其他实例,然后在旧的仍在运行时尝试再次运行 mongo ,从而出现问题。我的终端会告诉我 mongo 已经在端口 27017 上运行。每当发生这种情况时,我都会找到 PID 并杀死所有 mongo PID。
run-rs
创建事务 我所做的大部分内容都来自实际的 MongoDB 文档!具体来说这个页面:
https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set
brew 安装
[电子邮件受保护]复制: 复制集名称:rs0
$ ps wuax | grep mongo
$ kill (pid number)
mymongo_start_replica.sh 脚本就是这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>hvb.start.mongodb</string>
<key>ProgramArguments</key>
<array>
<string>/Users/me/mymongo_start_replica.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
就是这样!
备注:
截至 2024 年 4 月,Brew 将 MongoDB 配置文件放在这里:/opt/homebrew/etc/mongod.conf