Macbook airにmongoDBをインストールしようとしました。
公式Webサイトからzipファイルをダウンロードし、そのファイルを抽出してルートディレクトリに移動しました。その後、そのディレクトリの下に、/ data/dbと/ logフォルダーを作成しました。
これが私のmongodb.config
で、これは私のDBの基本的な設定を説明しています。
dbpath = /mongodb/data/db
logpath = /mongodb/log/mongo.log
logappend = true
#bind ip = 127.0.0.1
port = 27017
fork = true
rest = true
verbose = true
#auth = true
#noauth = true
さらに、構成ファイルで#
が何を意味するのかを知りたいです。
このファイルを/mongodb/bin
に配置しました。/mongodb
は、ファイルを抽出したディレクトリです。
ターミナルを開いて./mongod --config mongodb.config
と入力すると、これが返ってきました。
Juneyoung-ui-MacBook-Air:bin juneyoungoh$ ./mongod --config mongodb.config
about to fork child process, waiting until server is ready for connections.
forked process: 1775
all output going to: /mongodb/log/mongo.log
ERROR: child process failed, exited with error number 100
このエラーを処理するにはどうすればよいですか?
作成したデータフォルダーはSudo
で作成された可能性が非常に高いです。これらはroot
が所有しており、通常のユーザーは書き込みできません。あなたがあなたのMacbookの唯一のユーザーである場合、ディレクトリの所有権をあなたに変更してください:
Sudo chown juneyoungoh /data
Sudo chown juneyoungoh /data/db
Sudo chown juneyoungoh /data/log
これを公共のマシンまたは正当な場所にインストールする予定がある場合は、他の場所でmongoのセキュリティプラクティスの詳細をお読みください。 Macbookで実行します。
同様の問題があり、「Sudo」の問題とは関係ありませんでした。カーネルパニックから回復しようとしていた!
データフォルダーを見ると、mongod.lockファイルがそこにあることがわかりました。私の場合、このページは非常に役立ちました: http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/ 。彼らが説明するように、
mongod.lockがゼロバイトファイルでない場合、mongodは起動を拒否します。
私の環境でこのソリューションをテストしましたが、完全に機能します。
mongod.lock
ファイル。mongod --dbpath /your/db/path --repair
mongod --dbpath /your/db/path
私のマシンにも同じ問題がありました。ログファイルには:
Mon Jul 29 09:57:13.689 [initandlisten]エラー:ジャーナルファイルの空き容量が不足しています
Mon Jul 29 09:57:13.689 [initandlisten]少なくとも3379MBを/ var/mongoexp/rs2/journalで使用可能にするか、-smallfilesを使用してください
mongod --smallfiles
を使用して解決しました。または、設定ファイルよりも-configオプションでmongodを起動する場合は、nojournal=true
による先行書き込みジャーナリングを無効にします(先頭の#を削除します)。さらにディスク領域を増やすと、上記の問題が解決します。
同じエラーに関する同様の問題-修復スクリプトを実行しようとしましたSudo -u mongodb mongod -f /etc/mongodb.conf --repair
チェック済みps aux | grep mongo
そして、デーモンが実行されていたことを確認します。それを停止し、問題なく修復スクリプトを実行しました。
それが他の誰かに役立つことを願っています。
これは、おそらくmongodbを適切にシャットダウンしておらず、mongodbを正しい方法で起動していないためです。 _mongodb.config
_によると、_dbpath = /mongodb/data/db
_があります-リポジトリ_/mongodb/data/db
_を作成したと思いますか?すべてのステップを明確にします。
_mongodb.config
_で、_dbpath = /mongodb/data/db
_を_dbpath = /data/db
_に変更します。端末で、_mkdir /data/db
_と入力してdbリポジトリを作成します。これでリポジトリができました-mongoを起動できます。
バックグラウンドでmongoを起動するには、_mongod --dbpath /data/db --fork --logpath /dev/null
_と入力します。
/data/db
_は、dbの場所です。--fork
_は、バックグラウンドでmongoを起動することを意味します-デーモン。_--logpath /dev/null
_は、ログを記録したくないことを意味します-_/dev/null
_を_/var/log/mongo.log
_のようなパスに置き換えることで、それを変更できます
mongo
と入力し、次に_use admin
_とdb.shutdownServer()
を入力して、mongoに接続します。 mongoDB で説明するように
何らかの理由でこの手法が機能しない場合は、いつでもプロセスを強制終了できます。
次のように入力して、mongodbプロセスのPIDを見つけます。_lsof -i:27017
_ mongodbがポート_27017
_で実行されていると仮定して
_kill <PID>
_と入力し、_<PID>
_を前のコマンドで見つかった値に置き換えます。
Linux(Centos)でも同じエラーが発生しましたが、これでうまくいきました。
Dbpathからmongod.lockを削除します
$ rm /var/lib/mongo/mongod.lock
Mongodプロセスを修復する
$ mongod --repair
Mongod configを実行します
$ mongod --config /etc/mongod.conf
同じエラーが発生しました。ログを見るためにインタラクティブに実行しました。
2014-10-21T10:12:35.418-0400 [initandlisten] ERROR: listen(): bind() failed errno:48 Address already in use for socket: 0.0.0.0:27017
次に、lsof
を使用して、どのプロセスが自分のポートを使用しているかを調べました。
$ lsof -i:27017
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mongod 2106 MYUSERID 10u IPv4 0x635b71ec3b65b4a1 0t0 TCP *:27017 (LISTEN)
以前にフォークして、オフにするのを忘れていたのはmongod
でした(bashウィンドウで実行されていなかったため)。 kill 2106
を実行してそれを強制終了すると、エラー100なしでプロセスを実行できます。
サーバーの「/」パスに、フォルダー「data」と「db」を作成します。実際には、データを保存するフォルダーのアクセス許可を作成または変更する必要があります!