問題描述:
MongoDB啓動時報下列錯誤
[root@MongoDB ~]# mongo
MongoDB shell version: 2.6.1
connecting to: test
2014-05-25T18:47:24.021+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-05-25T18:47:24.022+0800 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed
原因分析:造成此錯誤的原因可能是因爲,保存數據庫目錄所在的物理存儲區域已經沒有空間了,所以導致數據庫故障。數據的存放目錄在在啓動mongod時自己指定的 --dbpath /home/mongo_db
問題的解決方法:
1、要想弄清楚出現該問題的原因,必須首先了解,mongo的數據存儲機制:
詳見鏈接:http://blog.csdn.net/djy37010/article/details/68942379
2、在瞭解完mongo的數據存儲機制後,就要針對上述問題,找出解決辦法:
開發環境有大量測試的 增加/刪除/修改 操作, 長期以來會導致數據文件非常大,但 實際存儲數據並不是很多.
進入mongo,通過db.stats( )即可查看各個數據項所佔用的空間大小。
如下圖所示就是所佔用的磁盤空間:
這些文件會佔用大量的磁盤空間,而實際的數據實際上是很少的(注,該文件夾的數據不能隨便刪除,否則會導致數據庫中的數據異常)。
解決辦法:
注,無效的解決辦法:刪除許多開發測試數據後(db.collection.remove()),數據文件顯然是不會變小的,至於爲什麼,請閱讀:mongo的數據存儲機制(見上).
(1)、dump到本機&restore:
(mongo的安裝路徑)/bin/mongodump --db dbname --host 127.0.0.1(本機) --port=27017
dump的結果是把數據dump到本地:/bin/dump/dbname/目錄下。
如下圖所示:
關閉mongodb
cd /data/mongodb/(啓動mongod時利用--dbpath所指定的路徑,就是爲了存放數據庫的各種數據)
rm db_name.*
啓動mongodb;啓動後登陸mongo 確認原來的mongo庫已被刪除(正常情況下show dbs已經看不到原來的數據庫)
use db_name;
(mongo的安裝路徑)/bin/mongorestore --db dbname --host=127.0.0.1 --port=27017 dump/dbname/
重啓mongod:nohup ~/.jumbo/bin/mongod --dbpath — > ~/.jumbo/bin/log &
登錄mongo:mongo --host= --port=--
(2)、遠程dump&restore:
(mongo的安裝路徑)/bin/mongodump --db dbname --host=--- (需要被dump的數據所在的主機的ip) --port=27017
dump的結果是把數據從遠程主機dump到本地:/bin/dump/dbname/目錄下。
如下圖所示:
關閉mongodb
cd /data/mongodb/(啓動mongod時利用--dbpath所指定的路徑,就是爲了存放數據庫的各種數據)
rm db_name.*
啓動mongod;啓動後登陸mongo 確認原來的mongo庫已被刪除(正常情況下show dbs已經看不到原來的數據庫)
use db_name;
(mongo的安裝路徑)/bin/mongorestore --db dbname --host=127.0.0.1 --port=27017 dump/dbname/
重啓mongod:nohup ~/.jumbo/bin/mongod --dbpath — > ~/.jumbo/bin/log &
登錄mongo:mongo --host= --port=--