質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.03%

MongoDBが起動しない

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,812

score 7

前提・実現したいこと

1.MongoDBを起動したい。
2.pythonからもMongoDBを起動しDBにデータを格納したいがエラーとなりできない

発生している問題・エラーメッセージ

1.MongoDBを起動できない
2.pythonからMongoDBを起動しようとするとエラーとなる

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 61] Connection refused


1.MongoDBを起動できない
mongodとターミナル上でコマンドを打つと、以下となりshutting downとあることから起動していないと判断。

I CONTROL  [initandlisten] MongoDB starting : pid=7000 port=27017 dbpath=/data/db 64-bit host=test
I CONTROL  [initandlisten] db version v3.4.9
I CONTROL  [initandlisten] git version: 876ebee8c7dd0e2d992f36a848ff4dc50ee6603e
I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2l  25 May 2017
I CONTROL  [initandlisten] allocator: system
I CONTROL  [initandlisten] modules: none
I CONTROL  [initandlisten] build environment:
I CONTROL  [initandlisten]     distarch: x86_64
I CONTROL  [initandlisten]     target_arch: x86_64
I CONTROL  [initandlisten] options: {}
I STORAGE  [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
I NETWORK  [initandlisten] shutdown: going to close listening sockets...
I NETWORK  [initandlisten] shutdown: going to flush diaglog...
I CONTROL  [initandlisten] now exiting
I CONTROL  [initandlisten] shutting down with code:100

2.pythonからMongoDBを起動しようとするとエラーとなる
仮想環境に入り、pymongoをインストール。pythonのインタラクティブシェル上で、以下のコマンドを打つが
データをcollection.insert_oneで格納しようとすると記載のエラーとなる。

from pymongo import MongoClient
client = MongoClient('localhost' , 27017)
type(client)
<class 'pymongo.mongo_client.MongoClient'>
db = client.test
type(db)
<class 'pymongo.database.Database'>
collection = db.spots
type(collection)
<class 'pymongo.collection.Collection'>

collection.insert_one({'name':'名前' , 'station':'駅'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/test/Documents/python/learning/lib/python3.6/site-packages/pymongo/collection.py", line 667, in insert_one
with self._socket_for_writes() as sock_info:
File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in enter
return next(self.gen)
File "/Users/test/Documents/python/learning/lib/python3.6/site-packages/pymongo/mongo_client.py", line 868, in _get_socket
server = self._get_topology().select_server(selector)
File "/Users/test/Documents/python/learning/lib/python3.6/site-packages/pymongo/topology.py", line 214, in select_server
address))
File "/Users/test/Documents/python/learning/lib/python3.6/site-packages/pymongo/topology.py", line 189, in select_servers
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 61] Connection refused

該当のソースコード

from pymongo import MongoClient
client = MongoClient('localhost' , 27017)
db = client.test
collection = db.spots
collection.insert_one({'name':'名前' , 'station':'駅'})

試したこと

https://teratail.com/questions/69643
と全く同じ状況にあるようにも思うのですが、mongodで起動できなかったことから、なぜ起動できないのかを
解決しないといけないと思ったのですが、そのなぜが分からずでして・・・
mongod --versionで
db version v3.4.9
と出てくるのでそもそもインストールできていないというわけではないと考えています。
また、あらかじめ、 mkdir -p /data/db
でディレクトリを作成しています。
dataとdbフォルダそれぞれを
ls -l
で確認するといずれも「drwxr-xr-x」となっているので
書き込み権限がない、というわけでもないのかなと思っています。

補足情報(言語/FW/ツール等のバージョンなど)

プログラミング初心者です。
MacOSでターミナルを使っています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2017/10/31 23:47

    mongodb のインストール方法は、「brew install mongodb」でしょうか?

    キャンセル

  • fuyutsuki

    2017/11/01 21:14

    はい、そうです

    キャンセル

回答 3

checkベストアンサー

+1

OS が、Mac OS ということですので、brew で、インストールしたと仮定して回答します。

brew でインストールすると インストールの最後の方に

To have launchd start mongodb now and restart at login: brew services start mongodb

と表示されていたと思いますので、ターミナルで、brew services start mongodbと 実行したら 起動するのではないかと思います。
もし、管理者権限を要求された場合は、sudo brew services start mongodb のように sudo を前につけてください。

停止する場合は、brew services stop mongodb になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/01 22:24

    アドバイスありがとうございます!
    brew services start mongodb
    で起動することができました。
    ただ、sa-yuさんからご指摘いただいた、アクセス権が原因である旨のエラーが出ていることが
    気になるので、もう少し調べてみます。

    キャンセル

+1

mongodコマンドの出力を見ると、以下のエラーが出ていますね。

exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating

/data/dbにロックファイルを作成しようとして失敗しているようなので、/data/dbディレクトリの権限を見直してみては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/31 22:45 編集

    ご回答ありがとうございます!
    「試したこと」に記載したのですが、「drwxr-xr-x」となっているので
    書き込み権限はあると思ったのですが、chomd 777のようにフルの権限を
    つけないといけないのでしょうか?(ちょっと怖い気がしています・・・)
    https://qiita.com/shisama/items/5f4c4fa768642aad9e06
    を参考にしたのですが、所有者については読み取りも書き込み権限もあるので
    大丈夫かなと思ったのですが・・・

    そもそもMacで/data/dbにディレクトリを作成しないほうがいいとかがあるのでしょうか・・・

    キャンセル

  • 2017/10/31 22:54

    申し訳ないです。見落としていました。
    試しに、フル権限をつけた状態にして、正常に起動するようであれば、権限周りの問題かどうか切り分けられるのではないでしょうか。

    キャンセル

  • 2017/11/01 22:19

    アドバイスありがとうございます。
    sudo mongod
    で起動することができたみたいです。
    よくみたらrootユーザーが所有者になっていたのでMacにログインしているユーザーを所有者に変更したのですが、それでは同じエラーで起動できませんでした。

    キャンセル

0

brew services start mongodb
または、
sudo mongod
で起動ができた。

/data/db/の所有者をログインユーザーに変えるだけでは
起動できなかった。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る