Mongodb报错及解决办法集合:

 删除有数据的表示报错如下:
 Thu Nov 28 10:30:40.833 SyntaxError: Unexpected token ILLEGAL
解决办法:>var c = db.getCollection(‘player’);c.drop(); 其中player是删除的表


启动 service mongod restart 是报错:

all output going to: /var/log/mongo/mongod.log
ERROR: child process failed, exited with error number 100
原因:配置文件错误,/etc/mongod.cnf中mongod配置文件中数据库路径的设置,或者是新增仓库没有mongod用户的权限



配置副本集报错
{ “ok” : 0, “errmsg” : “server is not running with –replSet” }
解决办法:在mongodb的配置文件中没有开启replset选项



配置副本集之后报错:
“errmsg” : “couldn’t parse cfg object unexpected field ‘_id ’ in object
原因:配置的mongodb的数据库不是空的,我主要是这个原因,也可以在其他机器上面初始化。
error: {
       ”$err” : “not master or secondary; cannot currently read from this replSet member”,
       ”code” : 13436
 
 
mongo 192.168.38.143/log –eval “var c = db.getCollection(‘daily_csv_2013:10:28’);c.drop();”
              
系统是centos6.4     系统位数是:64位  
首先检查是否有yum的源 yum info mongo-10gen 如果报错则配置yum
在/etc/yum.repos.d目录下创建mongodb的yum源配置文件10gen.repo
在文件中添加如下内容:vim 10gen.repo
[10gen]
Name=10gen Repository
 Baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
Gpgcheck=0
如下是安装mongodb的命令
 Yum install mongo-10gen 
最后查看mongodb包的相关信息: yum info mongo-10gen-server
创建系统开机启动: chckconfig –list 

                 Chkconfig 
启动(关闭/重启)mongo服务    service mongod  start 

 Mongodb的常用命令
登陆mongdb数据库#mongo admin 
使用数据库>use admin
显示mongodb数据库中所有的数据库>show 
显示 数据库中所有的集合(表)>show collections;
创建集合 >db.createCollection(”自己创建表的名称”);如log
查看集合中的数据>db.log.find();
在集合中添加数据>db.log.save({age:1});
创建用户 >db.addUser(“自己创建用户”,”密码”);如用户名kernel 密码:123456

对用户名进行认证>db.auth(“用户名”,”密码”);没有认证的用户名无法对mongodb数据库进行操作
查看已存在的用户命令:db.system.users.find()
删除用户的命令:db.system.users.remove({user:”用户名称”})
二,mongodb数据库导入csv文件(本地服务器)
参数说明:
-h 192.168.38.143:27017  
-d  admin    用户名              用>show dbs;  查看所有用户             
-c user     集合(表)           用>show Collections;  

-f datetime, loglevel,id,title,content,moduledetail,threaded  
 csv    指明导入的文件类型    后面跟文件
这是一张csv的表中的元素:



 

 
mongoimport导入如上图的一张表,其中导入数据库名是log,表名(collection)名:player,可以随意取名字。本地目录的CSV表:player.csv
Mongoimport  -d log -c player -f datetime, loglevel,id,title,content,moduledetail,threadid –type csv player.csv
  
mongoexport  -uroot -p123456  -d log -c player -o player.csv  

如果导入和导出的时候。表的结构不是CSV数据类型,而是bson数据,如图:


导出命令如下:mongoexport  -uroot -p123456  -d log -c player -o player.dat
导入命令:mongoimport  -uroot -p123456  -d log -c player  player.dat



二,远程导入与导出

远程IP地址:192.168.38.120,数据库名:log 数据库用户名:root 密码123456 数据库中的表名:player
远程导出如下:
mongoexport -h 192.168.38.120 -d log  -u root -p123456   -c player  -o player.dat
远程导入如下:
mongoimport -h 192.168.38.120 -d log  -u root -p123456   -c player  
CSV数据远程导出
这里远程服务器没有开启认证,

mongoexport -h 192.168.38.143 -d log -c daily  -o daily.csv
远程导入CVS数据:
mongoimport -h 192.168.38.120 -d log -c daily -f id,datetime,loglevel,title,content,moduledetail,threadid –type csv  daily.csv

 

  远程初次导入数据生成CSV数据,需要指明生成数据的标签id,datetime,loglevel,title,content,moduledetail,threadid,和数据类型 –type csv 

 

 
 
 
 
 
 
 

   mongoexport提供条件过滤功能: 
 
 
 

   mtb1表里有一个字段为name,值有joe,可以根据条件导出所需数据: 
 
 
 

   mongoexport -h 127.0.0.1 –port 50000 -d testdb -c mtb1 -q ‘{name:”joe”}’ -o mtb1.dmp 
 
 
 

   导出name为joe的数据 
 
 




          
Mongodb主服务器配置如下:
登陆主机ip:192.168.38.117做如下的配置:
修改mongodb配置文件Vim /etc/mongo.cnf
Master = ture               
Source = 192.168.38.143 从机的源IP地址
完成配置之后重启 service mongod restart 
登陆从机IP:192.168.38.143 做如下的配置
修改从机的mongodb的配置文件vim 
Slave = ture            
Source = 192.168.38.143 主机源IP地址
配置完成之后重启 
主从测试:登陆(192.168.38.117)主机的数据库 
 #mongo admin  
  
  
    
         
>use test;              
      
>show collections();             
        
               
确保有数据以后,登陆(192.168.38.143)从服务器的数据库检查数据是否同步
# mongo 
>db.kernel.find();如果看到刚才的数据,则说明配置成功




          
提醒:1.配置mongodb自动故障恢复功能的主从集群。一定要确保mongo里面的除了admin和local之外的数据库为空时进行搭建,否则初始化成员节点的时候,一定会失败的,2.如果数据库是空的,依然初始化节点失败,则需要到从机上面执行初始化配置。因为在主从复制的时候,活跃节点会发生变化。会导致初始化节点失败。
报错如下:


修改mongo的配置文件   
replSet = i9yu               
保存,退出。
 
  $ mongo 192.168.38.117  
  MongoDB shell version: 2.4.8  
  connecting to: 192.168.38.117/test  
  > rs.status()  
  {  
          “startupStatus” : 3,  
          “info” : “run rs.initiate(…) if not yet done for the set”,  
          “errmsg” : “can’t get local.system.replset config from self or any seed (EMPTYCONFIG)”,  
          “ok” : 0  
 }  
 >   
 
说明复制集群没有进行配置。
配置节点成员:
cfg={ _id:’i9yu’,members:[{_id:0,host:’192.168.38.117:27017’},{_id:1,host:’192.168.38.143:27017’}]}
cfg={_id : ’i9yu’,members:[ { _id:0,host:’192.168.38.117:27017’}, { _id:1,host:’192.168.38.143:27017’} ]}
信息显示如下:{  
 
 
          “_id” : “i9yu”,  
          “members” : [  
                  {  
                          “_id” : 0,  
                          “host” : “192.168.158.130:27017”  
                  },  
                  {  
                          “_id” : 1,  
                         “host” : “192.168.158.131:27017”  
                 }  
         ] 
   
 

_id:i9yu 表示副本集名称的id mongodb随机分配存储的id
  
初始化配置
> rs.initiate(cfg)
{
       “info” : “Config now saved locally. 
      
}
如上所示表明配置成功,显示标签发生变化。
查看配置的当前状态:
> rs.status()