Mongo is letting me down - mongodb

I've been trying to run mongo on my system, but I just doesn't want to start. I've installed mongodb with brew. Both mongo and mongod are on my system and I can use them. But the mongod process won't start.
These are the steps I'm taking after I installed mongo on my system with brew.
$ mongod
all output going to: /usr/local/var/log/mongodb/mongo.log
$
It seems mongod is closing directly, because I don't see any process running and it gives me the dollar sign back again. Thereby there's no rotating icon in my terminal, so it isn't running.
If I open a new window in the terminal after running the above command, I'm getting this error:
$ mongo
MongoDB shell version: 2.4.3
connecting to: test
Thu May 23 12:22:09.314 JavaScript execution failed: Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:L112
exception: connect failed
$
This output is a logical error seen from the fact mongod didn't do a thing. But when I run this:
$ ps -ef | grep mongod
501 99123 15827 0 12:24PM ttys001 0:00.00 grep mongod
$
So I'm not sure or it's running or not.. You guys know a solution for this? Because I can't figure out what I'm doing wrong..
update
I've tried to change the db path and that works partially. I'm now able to run mongod command, but I need to specify the dbPath even though I have the dbPath changed in the config file.
$ mongod --dbpath ~/data/db/
And when I try to run mongod by itself, it won't run..
$ mongod
all output going to: /usr/local/var/log/mongodb/mongo.log
$

I don't have a working solution, but from your output, it seems like mongod is running daemonized. You could try setting the 'fork' option to false (or uncommenting it) in /usr/local/Cellar/mongodb/2.4.x-x86_64/mongod.conf and running mongod with the -v / --verbose flag to see if that gives you more details.
Also, are you sure you're actually using the homebrew version of mongo and not some previously installed version? You can check which mongod is used by running:
➜ ~ which mongod
/usr/local/bin/mongod
And the following to see if that's indeed the version that got installed using homebrew:
➜ ~ ls -l /usr/local/bin/mongod
lrwxr-xr-x 1 user admin 41 21 mrt 22:06 /usr/local/bin/mongod -> ../Cellar/mongodb/2.4.x-x86_64/bin/mongod

The default data directory is /data/db. In order to have that work by default you need to do two things:
sudo mkdir -p /data/db
sudo chown `whoami` /data/db

Related

MongoDB server with OS Catalina

I upgrade my Mac OS to Catalina and now my server is not working well. I reinstalled all the system from scratch and reinstall with brew, however when trying to connect to Mongo website learning database the system does not allow through the shell. It returns in the end of the body the following message:
"ctx":"initandlisten","msg":"Shutting down","attr":{"exitCode":48}
I don't know about MAC OS but I faced the same issue on my Ubuntu 20.04 recently. I was trying to run the mongodb server on local machine using a specified path data which is a directory(folder). But it was giving me the same exitcode:48 as mentioned by you. I solved it by stopping the mongod server running on my system using the command:
sudo systemctl stop mongod
And then executed the command:
mongod --dbpath=data --bind_ip 127.0.0.1
With the following code, on Terminal you can find PID for mongodb and kill it:
lsof -i :27017 | awk '{print $2}' | tail -n 1 | xargs kill -9
The default mongodb port number is 27017. You can change it if you have another mongodb port number.
FYI, awk, tail are just extracting the PID number for the given port and, if it exists, then it goes and terminates it.
You already tried to specify another port?
Like mongo shell: mongod --port 27018
In my case, I went through the error, and found it was due to the permission issue for,
data/db folder creation
it was not able to open the socket.
Fixed it by below
created the data/db folder in my convenient directory, ie in my common codebase folder
> mkdir data && cd data && mkdir db
> pwd
/User/{uname}/codebase/data/db
mongob --dbpath="/User/{uname}/codebase/data/db"

Cannot start mongodb server

I'm following this tutorial, as well as this one, and I keep getting the same error when starting up my mongodb server.
Running just mongo returns
zsh: command not found: mongod
Running ./mongod returns
zsh: exec format error: ./mongod
Running sudo ./mongod returns
./mongod: ./mongod: cannot execute binary file
My mongodb folder is located in ~/mongodb, which is where the bin folder is. I also created the directory where Mongo will store the data in /data/db, with the correct permissions: drwxr-xr-x. I don't know what I'm missing, or what I'm doing wrong.
How do I start the mongodb server?
Solved
I was using the wrong OS. I downloaded the linux version when I should have downloaded the OS X version since I'm on a Mac. Once I did, everything worked fine.
Much more robust is if you start it as a service with sudo service mongod start
Alternatively, you need to make sure the directory is added to .bashrc.
try this command. It worked for me in git bash
./mongod.exe --port <port number> --dbpath <db folder path>
Ex:
./mongod.exe --port 27017 --dbpath E:/Projects/Databases/data/db
Most likely the path to your MongoDB is not within your $PATH. If you are on linux you can quickly run:
echo $PATH
If it is not in your path, then you want to add it:
export PATH=/path_to_mongodb_bin/:$PATH
Once done, attempt to start mongodb by running:
mongod

MongoDB: ERROR: child process failed, exited with error number 14

I run MongoDB on Mac:
Shave:mongodb_simple Logan$ ./bin/mongod -f conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 5110
ERROR: child process failed, exited with error number 14
Is that because I shutdown it in wrong way?
You started and probably shutdown mongo in the wrong way.
1. TO START MONGODB
To start mongo in the background type: mongod --dbpath /data/db --fork --logpath /dev/null.
/data/db is the location of the db. If you haven't created one yet => type: mkdir /data/db
--fork means you want to start mongo in the background - deamon.
--logpath /dev/null means you don't want to log - you can change that by replacing /dev/null to a path like /var/log/mongo.log
2. TO SHUTDOWN MONGODB
Connect to your mongo by typing: mongo and then use admin and db.shutdownServer(). Like explain in mongoDB
If this technique doesn't work for some reason you can always kill the process.
Find the mongodb process PID by typing: lsof -i:27017 assuming your mongodb is running on port 27017
Type kill <PID>, replace <PID> by the value you found the previous command.
Check the ownership of the file /tmp/mongodb-27017.sock
It should be mongod. I got same error since it was root:root
For me it was ulimit issue, mongo could not open too many files.
Used ulimit -n 10000.
However as a generic pointer look into mongo logs file, they will tell where to look further. Generally the logs file are in /var/log/mongo.log but look into your mongo config file.
It's because you haven't configured your mongod instance correctly in the config file that you passed to the -f option.
Revisit your config file and make sure eveything is configured correctly.
By changing owner to mongodb for all files under /var/lib/mongodb/ it started working for me:
chown mongodb:mongodb -R /var/lib/mongodb/
This worked for me:
run in terminal
sudo rm -rf mongod.lock
export LC_ALL=C
then
sudo mongod --fork --config /xxxx/xx/mongod.conf --logpath /xxx/log/mongodb/mongodb.log
with me I remove file: /tmp/mongodb-27017.sock
then restart mongod
Just run this and start mongod
rm -f /tmp/mongodb-27017.sock
systemctl start mongod
Check if the mongod is running with pgrep mongod or ps -aef | grep mongod or systemctl status mongod
Stop and restart it to check if the issue gone
if you start mongod with mongod -f /etc/mongod.conf kill it with pkill -9 mongod then start it with mongod -f /etc/mongod.conf
fi you run it a service, use systemctl restart mongod to restart it.
If restart not works, figure out the issue by the /var/log/message and /var/log/mongodb/mongod.log file.
use tail -f /var/log/message and tail -f /var/log/mongodb/mongod.log to check the output when your action.
for example:
1.
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
delete the sock file with `rm`
2.
WiredTiger error (13) [1596090168:830936][25997:0x7fe22f208b80], wiredtiger_open: __posix_open_file, 672: /data/mongo/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1596090168:830936][25997:0x7fe22f208b80], wiredtiger_open: __posix_open_file, 672: /data/mongo/WiredTiger.turtle: handle-open: open: Permission denied
Failed to start up WiredTiger under any compatibility version
Reason: 13: Permission denied
check the file permission or owner with `ls` then change to the wright permission with `chmod` or right owner with `chown`
I had this same issue, but mine was the system clock being off so my SSL cert was technically invalid. Changing to the current date and time worked date --set "<DD M Y H:M>" Only found this by looking at the mongodb log
I encountered this issue on a GCP managed Compute Engine instance.
As this is the top answer on a Google search for the issue, I'll include what worked for me, and is a documented bug as per MongoDB (jira-link)
On linux systems, if the user running mongod does not have a locale set or the locale is misconfigured, mongod fails to start printing a stack trace.
The issue can be resolved by combining a few steps:
Install the required language packs (ref):
sudo apt-get install language-pack-XX
Run update locale (ref):
sudo update-locale
Restart your session, and check the same mongo command again
IFF the above doesn't work (it didn't for me), just manually add the following to the file at /etc/default/locale (ref):
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
Just to admire the absence of those persistent warnings about LC_ALL not being set, run the following:
sudo dpkg-reconfigure locales
That's all, your MongoDB instance should be good to go now!
In my mongodb setup, in order to retain a specific version of mongoDB inline to existing servers and also to avoid having binary files placed under root disk, i changed the path of all mongo binaries in a different directory. i had to use rpm option instead of yum option (as yum installs only the latest version despite of mentioning the specific version).
rpm -ivh --prefix=/apps/mongodb /apps/mongo_rpm_packages/mongodb-org-*.rpm
Note: The default path where the binaries will be placed is /var/lib/mongo.
This approach does not either allow required permission for mongod user or its not provisioned properly and hence, i changed user and group in mongod.service file to root user and managed to successful start the process using:
service start mongod
Use --shutdown
mongod --shutdown
Then
service mongod restart
It work!
https://docs.mongodb.com/manual/tutorial/manage-mongodb-processes/#use-shutdown

how do I force the mongodb service to use /etc/mongodb.conf?

Related question, didn't fix the issue: MongoDB not using /etc/mongodb.conf after I changed dbpath
On Ubuntu 12.04. $ mongod --version = db version v2.4.9
I'd like the mongo service to use /etc/mongodb.conf (I thought it was set to do that out of the box but apparently not).
$ cat /etc/mongodb.conf | grep dbpath
dbpath=/home/xyz/mongodb
$ cat /etc/mongodb.conf | grep logpath
logpath=/home/xyz/mongodb-logs
$ ll /home/xyz| grep mongo
drwxrwxr-x 2 mongodb mongodb 4096 Feb 19 11:58 mongodb/
drwxrwxr-x 2 mongodb mongodb 4096 Feb 19 11:58 mongodb-logs/
(the instructions say it should be mongod user but that doesn't exist, while mongodb does, instructions incorrect?)
But whenever I start mongod it tries to use /data/db:
ERROR: dbpath (/data/db/) does not exist.
I've looked in the init.d script and don't see any options for config path:
$ cat /etc/init.d/mongodb | grep config
# release without the 'show-config' command (introduced in
initctl show-config -e "$JOB"|grep -q '^ start on' || DISABLED=1
When I restart the service it appears to immediately stop:
$ sudo service mongodb restart
stop: Unknown instance:
mongodb start/running, process 2495
$ sudo service mongodb status
mongodb stop/waiting
Is this a bug? It appears to be ignoring the config file. I know I can start it using --dbpath or --config, but shouldn't it be reading the config file if it isn't provided a dbpath? Since the service is failing to start (apparently) where can I find the error that caused it to fail?
I had a similar problem (on v3.2) which turned out to be due to an error in my /etc/mongod.conf. I had the following:
replication:
replSet: rs0
which should have been:
replication:
replSetName: rs0
Starting mongod via sudo service mongod start failed silently with nothing in the logs. Fixing the config allowed mongod to start.
This was actually on RHEL, and I verified that the init script was passing --config /etc/mongod.conf. I assume it's the same on Ubuntu.

MongoDB on Ubuntu won't start as a service, nothing in the log

Am running MongoDB 2.2 on Ubuntu and if I run:
sudo mongod
I get an error that it can't find /data/db, which is not where the database is. In mongod.conf the database path is specified as the Ubuntu 10gen default /var/lib/mongodb which is where the db is located. Seems like mongod is not finding the conf file. So when I run:
sudo mongod -f /etc/mongodb.conf
The server starts up fine and output is logged to the log file: /var/log/mongodb/mongodb.log. All is happy. I can switch to another shell, log into mongo shell, see the databases and run queries.
So, I cancel out of that and try to run as a service:
> sudo status mongodb
mongodb stop/waiting
> sudo start mongodb
mongodb start/running, process 10468
Looks good so far, but the mongo server did not start. Running another:
> sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB shell version: 2.2.0
connecting to: test
Sat Sep 1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed
"test" is not the correct database, and nothing appears in the log file.
I am at a loss as to what could be wrong. I checked the upstart scripts and they seem fine. /etc/init/mongodb.conf runs:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
OK, this all comes down to permissions, but let's take it step by step. When you run sudo mongod it does not load a config file at all, it literally starts with the compiled in defaults - port 27017, database path of /data/db etc. - that is why you got the error about not being able to find that folder. The "Ubuntu default" is only used when you point it at the config file (if you start using the service command, this is done for you behind the scenes).
Next you ran it like this:
sudo mongod -f /etc/mongodb.conf
If there weren't problems before, then there will be now - you have run the process, with your normal config (pointing at your usual dbpath and log) as the root user. That means that there are going to now be a number of files in that normal MongoDB folder with the user:group of root:root.
This will cause errors when you try to start it as a normal service again, because the mongodb user (which the service will attempt to run as) will not have permission to access those root:root files, and most notably, it will probably not be able to write to the log file to give you any information.
Therefore, to run it as a normal service, we need to fix those permissions. First, make sure MongoDB is not currently running as root, then:
cd /var/log/mongodb
sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
sudo chown -R mongodb:mongodb .
That should fix it up (assuming the user:group is mongodb:mongodb), though it's probably best to verify with an ls -al or similar to be sure. Once this is done you should be able to get the service to start successfully again.
First confirm that the mongodb user/group has permission to write to both the data directory and log file:
$ sudo chown -R mongodb:mongodb /var/lib/mongodb/.
$ sudo chown -R mongodb:mongodb /var/log/mongodb.log
Start up MongoDB as a Daemon (background process) using the following command:
$ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath
/var/log/mongodb.log --logappend
To Shut Down MongoDB enter the Mongo CLI, access the admin and issue the shutdown command:
$ ./mongo
> use admin
> db.shutdownServer()
Ref: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
I too had the same problem. So I went to cd /var/lib/mongodb/ and deleted the mongod.lock file
Then it worked for me.
After checking all permission in the data, journal and log folders as suggested by #nelsonic, my problem was solved by giving permission to lock file in the /tmp folder
sudo chown mongod:mongod mongodb-27017.sock
I was running it as a AWS Amazon Linux instance.
I figured that out by executing as the mongod user as below, and then, researching the error code. It might be useful for other troubleshooting.
sudo -S -u mongod mongod -f /etc/mongod.conf
Just try this command:
sudo chown mongodb /tmp/mongodb-27017.sock
Nothing worked for me, then I've found that it was a permissions problem on /tmp directory:
sudo chmod 1777 /tmp
sudo chown root:root /tmp
None of the above answers worked for me. I finally figured it out by debugging the init script with:
sudo bash -x /etc/init.d/mongodb start
And seeing it was passing the wrong config path to mongod. I simply changed the line in /etc/init.d/mongodb from "CONF=/etc/mongodb.conf" to "CONF=/etc/mongod.conf". Version 2 uses the former, and installing version 3 added /etc/mongod.conf with the new format but apparently did not update the init script.
UPDATE: I now have a much stranger problem where the init script works, but only if I run it with "sudo bash -x /etc/init.d/mongodb start" and not with "sudo service mongodb start". Same thing for stop.
My mongodb was starting when launched from the command line as the mongod user, but not as a service with User=mongod.
After an hour checking permissions, definition of the service, sockets... it was SElinux !
In /etc/selinux/config I switched from enforcing to permissive and reboot. It is now ok.
After none of the above answers worked for me, deleting my log file brought Mongo back to life.
These days this error can occur if you've updated mongod and you are running and old database. Mongod will be using the wiredTiger engine by default and you'll have a mmapv1 database
edit the engine setting in /etc/mongod.conf
# engine: wiredTiger
engine: mmapv1
Careful - YAML is whitespace sensitive
journalctl/systemd won't see this problem. Check the mongod log in /var/log/mongodb/mongod.log
I presume you can convert the database with something like the steps outlined here
https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/