MongoDB
Installation
To install the latest version of MongoDB:
- Type this in Terminal:
brew install mongodb
To install a specific version of MongoDB:
- Type the followings in Terminal instead:
brew search mongodb - You should see the output like these:
mongodb homebrew/php/php54-mongodb homebrew/versions/mongodb30 homebrew/php/php55-mongodb Caskroom/cask/mongodb-compass homebrew/php/php56-mongodb Caskroom/cask/mongodb homebrew/php/php70-mongodb Caskroom/cask/mongodbpreferencepane homebrew/php/php71-mongodb Caskroom/cask/orelord-mongodb homebrew/versions/mongodb26 Caskroom/versions/mongodb-compass-beta - Copy the version you want to install, e.g.
homebrew/versions/mongodb30 - And run
brew installlike this:brew install homebrew/versions/mongodb30
To check the installed MongoDB daemon version:
mongod --versionTo check the the Mongo Shell version:
mongo --version
Start/Restart/Stop MongoDB
To start the MongoDB, type this in Terminal:
brew services start mongodbIf you get an error of
Formula mongodb is not installed, it may because you chose to install specific version of MongoDB.Try this to find the correct name of the service:
brew services listThen start MongoDB with the correct service name for example:
brew services start mongodb30
To restart:
brew services restart mongodbTo stop: (or prevent MongoDB from started again when the Mac is reboot)
brew services stop mongodbNotes: If
brew services listshowing the service status is started, the service will become started again when the Mac is reboot.
Troubleshooting
- If you see this error while using
brew servicescommand:Error: Unknown command: services - It is because brew services has not been tapped.
- Go back to the Homebrew section under Core Setup.
Replica Set mode
Skip this part if you don't need to run MongoDB in both standalone and replica set modes at the same time.
This is to create a replica set with 3 nodes running on ports 27117, 27118, 27119
Determine the folder to store the LaunchAgent plist
brew services listIf the service name is
mongodb, the LaunchAgent plist will be stored in/usr/local/opt/mongodbType this to confirm:
ls -la /usr/local/opt/mongodbIf you install older version of MongoDB, the service name may be something else, e.g.
mongodb30Then the LaunchAgent plist will be stored in
/usr/local/opt/mongodb30/insteadAfter you find the folder, do this to ease the upcoming steps:
export mongodb_service_name="mongodb"If you install older version of MongoDB: (replace the service name)
export mongodb_service_name="mongodb30"Create log folders
mkdir -p /usr/local/var/log/mongodb_rs1_node1 mkdir -p /usr/local/var/log/mongodb_rs1_node2 mkdir -p /usr/local/var/log/mongodb_rs1_node3- Create data folders
mkdir -p /usr/local/var/mongodb_rs1_node1 mkdir -p /usr/local/var/mongodb_rs1_node2 mkdir -p /usr/local/var/mongodb_rs1_node3 - Create config file for the 1st node
/usr/local/etc/mongodb_rs1_node1.confsystemLog: destination: file path: "/usr/local/var/log/mongodb_rs1_node1/mongo.log" quiet: true logAppend: true storage: journal: enabled: true dbPath: "/usr/local/var/mongodb_rs1_node1" engine: "wiredTiger" processManagement: fork: true net: port: 27117 replication: replSetName: "rs1" - Create config file for the 2nd node
/usr/local/etc/mongodb_rs1_node2.confsystemLog: destination: file path: "/usr/local/var/log/mongodb_rs1_node2/mongo.log" quiet: true logAppend: true storage: journal: enabled: true dbPath: "/usr/local/var/mongodb_rs1_node2" engine: "wiredTiger" processManagement: fork: true net: port: 27118 replication: replSetName: "rs1" - Create config file for the 3rd node
/usr/local/etc/mongodb_rs1_node3.confsystemLog: destination: file path: "/usr/local/var/log/mongodb_rs1_node3/mongo.log" quiet: true logAppend: true storage: journal: enabled: true dbPath: "/usr/local/var/mongodb_rs1_node3" engine: "wiredTiger" processManagement: fork: true net: port: 27119 replication: replSetName: "rs1" - Create LaunchAgent for the 1st node
/usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node1.plist<?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>homebrew.mxcl.mongodb_rs1_node1</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/mongod</string> <string>--config</string> <string>/usr/local/etc/mongodb_rs1_node1.conf</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/mongodb_rs1_node1/output.log</string> <key>StandardOutPath</key> <string>/usr/local/var/log/mongodb_rs1_node1/output.log</string> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> </dict> </plist> - Create LaunchAgent for the 2nd node
/usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node2.plist<?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>homebrew.mxcl.mongodb_rs1_node2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/mongod</string> <string>--config</string> <string>/usr/local/etc/mongodb_rs1_node2.conf</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/mongodb_rs1_node2/output.log</string> <key>StandardOutPath</key> <string>/usr/local/var/log/mongodb_rs1_node2/output.log</string> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> </dict> </plist> - Create LaunchAgent for the 3rd node
/usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node3.plist<?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>homebrew.mxcl.mongodb_rs1_node3</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/mongod</string> <string>--config</string> <string>/usr/local/etc/mongodb_rs1_node3.conf</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/mongodb_rs1_node3/output.log</string> <key>StandardOutPath</key> <string>/usr/local/var/log/mongodb_rs1_node3/output.log</string> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> </dict> </plist> - Enable these 3 LaunchAgents
cd ~/Library/LaunchAgents ln -s /usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node1.plist homebrew.mxcl.mongodb_rs1_node1.plist ln -s /usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node2.plist homebrew.mxcl.mongodb_rs1_node2.plist ln -s /usr/local/opt/$mongodb_service_name/homebrew.mxcl.mongodb_rs1_node3.plist homebrew.mxcl.mongodb_rs1_node3.plist launchctl load homebrew.mxcl.mongodb_rs1_node?.plist - Verify if the 3 MongoDB nodes are running properly
mongo --port 27117 mongo --port 27118 mongo --port 27119 - Initialize Replica Set
mongo --port 27117 - In Mongo shell, type:
rsconf = { _id: "rs1", members: [ { _id: 0, host: "localhost:27117" } ] } rs.initiate( rsconf ) rs.add("localhost:27118") rs.add("localhost:27119") - To verify:
mongo --port 27117 - Then in Mongo shell:
rs.status() - You should see output like these:
{ "set" : "rs1", "date" : ISODate("2016-12-25T17:46:47.411Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "localhost:27117", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 54, "optime" : Timestamp(1482687993, 1), "optimeDate" : ISODate("2016-12-25T17:46:33Z"), "electionTime" : Timestamp(1482687992, 2), "electionDate" : ISODate("2016-12-25T17:46:32Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "localhost:27118", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 14, "optime" : Timestamp(1482687993, 1), "optimeDate" : ISODate("2016-12-25T17:46:33Z"), "lastHeartbeat" : ISODate("2016-12-25T17:46:45.865Z"), "lastHeartbeatRecv" : ISODate("2016-12-25T17:46:45.864Z"), "pingMs" : 0, "configVersion" : 3 }, { "_id" : 2, "name" : "localhost:27119", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 13, "optime" : Timestamp(1482687993, 1), "optimeDate" : ISODate("2016-12-25T17:46:33Z"), "lastHeartbeat" : ISODate("2016-12-25T17:46:45.865Z"), "lastHeartbeatRecv" : ISODate("2016-12-25T17:46:45.865Z"), "pingMs" : 0, "configVersion" : 3 } ], "ok" : 1 }