MongoDB常见报错

1.插入数据时报错

WriteResult({
    "writeError" : {
        "code" : 13,
        "errmsg" : "not authorized on dba to execute command {
insert: \"test\", ordered: true, lsid: { id: UUID
(\"0307da24-4969-4613-bbe2-72c3a9a188bf\") }, $db: \"dba\" }" } })

解决方法:给用户设置对应控制权限

db.createUser({
    user: "doker",
    pwd: "dm123",
    roles: [{
        role: "readWrite",
        db: "testWrite"
    }, {
        role: "read",
        db: "dba"
    }]
})

 


 

2.在副本集环境下,在从库无法进行读取操作,这是正常的,因为MongoDB的slave默认是不可读写的

2020-12-29T22:19:02.417+0800 E QUERY    [thread1] Error: listCollections failed: {
    "operationTime" : Timestamp(1609251538, 1),
    "ok" : 0,
    "errmsg" : "not master and slaveOk=false",
    "code" : 13435,
    "codeName" : "NotMasterNoSlaveOk",
    "$clusterTime" : {
        "clusterTime" : Timestamp(1609251538, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
} :

解决方法有两种:

(1)临时解决方法,在从库执行

rs.slaveOk();

注意:当执行这条命令时会有一个警告,意思是这条参数可能在以后的版本弃用了,将会用 secondaryOk()代替
“WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.”

(2)永久生效,在root目录下有一个.mongorc.js的文件,将这个参数写进去就可以了

echo "rs.slaveOk();" >> .mongorc.js

 


 

posted @ 2020-12-29 14:42  鄧萌  阅读(1492)  评论(0)    收藏  举报