MongoDB次要副本没有主副本中的集合
我在本地机器上设置了一个mongodb副本集,并在一个名为“adaptive db”的数据库中创建了两个集合。在mongo shell中,当我连接到主数据库并运行show dbs时,我可以看到并查询我的数据库“adaptive db” 然后我切换到secondary,运行rs.slaveOk(),希望看到在primary中创建的“adaptive db”也出现在secondary中,但我没有看到它 以下是我运行的命令:MongoDB次要副本没有主副本中的集合,mongodb,replicaset,Mongodb,Replicaset,我在本地机器上设置了一个mongodb副本集,并在一个名为“adaptive db”的数据库中创建了两个集合。在mongo shell中,当我连接到主数据库并运行show dbs时,我可以看到并查询我的数据库“adaptive db” 然后我切换到secondary,运行rs.slaveOk(),希望看到在primary中创建的“adaptive db”也出现在secondary中,但我没有看到它 以下是我运行的命令: shell:bin user1$ ./mongo localhost:270
shell:bin user1$ ./mongo localhost:27017
MongoDB shell version: 3.0.2
connecting to: localhost:27017/test
rs0:PRIMARY> show dbs
adaptive-db 0.125GB
local 0.281GB
rs0:PRIMARY> use adaptive-db
switched to db adaptive-db
rs0:PRIMARY> show collections
people
student
system.indexes
rs0:PRIMARY> db.people.find().count()
6003
rs0:PRIMARY> exit
bye
shell:bin user1$ ./mongo localhost:27018
MongoDB shell version: 3.0.2
connecting to: localhost:27018/test
rs0:SECONDARY> show dbs
2015-06-25T11:16:40.751-0400 E QUERY Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
at Error (<anonymous>)
at Mongo.getDBs (src/mongo/shell/mongo.js:47:15)
at shellHelper.show (src/mongo/shell/utils.js:630:33)
at shellHelper (src/mongo/shell/utils.js:524:36)
at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
rs0:SECONDARY> rs.slaveOk()
rs0:SECONDARY> show dbs
admin 0.031GB
local 0.281GB
rs0:SECONDARY>
谢谢我猜一点,但是从你看到的其他收藏来看,你在
本地
数据库中。顾名思义,它是不被复制的(它包含oplog、startup_log和其他类似的东西,这些东西是特定于实例的,如果被复制的话会变得一团糟)
使用不同的数据库。在控制台中连接到
127.0.0.1/somedb
(使用适当的IP/主机名),或使用somedb
,以切换数据库。然后创建集合,这些集合应该被复制(当然,在我的示例中,复制到同名的数据库-somedb
)我猜一点,但从您看到的其他集合来看,您在本地数据库中。顾名思义,它是不被复制的(它包含oplog、startup_log和其他类似的东西,这些东西是特定于实例的,如果被复制的话会变得一团糟)
使用不同的数据库。在控制台中连接到127.0.0.1/somedb
(使用适当的IP/主机名),或使用somedb
,以切换数据库。然后创建集合,这些集合应该被复制(当然,在我的示例中,复制到同名的数据库-somedb
)在辅助副本成员上运行命令rs.slaveOk()
;这允许当前连接允许在辅助成员上运行读取操作
供参考:
在次副本成员上运行命令rs.slaveOk()
;这允许当前连接允许在辅助成员上运行读取操作
供参考:
对于较新版本的MongoDB,在辅助数据库上运行命令rs.secondaryOk()
。对于较新版本的MongoDB,在辅助数据库上运行命令rs.secondaryOk()
。发布命令输出时,请使用代码格式。它使事情更具可读性。请在发布命令输出时使用代码格式。多亏了你的纠正,我把我的收藏移到了一个新的数据库,但它仍然不起作用。我已经用最新的命令序列更新了我的问题database@user1437795你的奴隶是最新的吗?rs.status()
说什么?或者rs.conf()
对于这个问题…更新:我最初在“local”数据库中拥有集合,然后使用:db.runCommand({renameCollection:“local.student”,改为:“adaptive db.student”})将其移动到自定义数据库中。但是,当我尝试创建一个全新的数据库,并在其中创建新的集合时,复制效果很好。所以,我想这和“重命名集合”有关。我用rs.conf()@user1437795回答了这个问题,这是有道理的。如果创建一个未被复制的集合,然后重命名数据库,则复制rename命令将导致在从属服务器上执行无效操作(因为没有可重命名的内容)。可能日志中甚至会出现错误/警告。如果不是,您可能应该将其作为MongoDB bug()归档。我甚至会说,让您在replicaSet上从/重命名到本地数据库是一个bug。。。但我并没有深入到mongo设计中去,不知道是否有原因。感谢您的纠正,我将我的收藏移到了一个新的数据库中,但它仍然不起作用。我已经用最新的命令序列更新了我的问题database@user1437795你的奴隶是最新的吗?rs.status()
说什么?或者rs.conf()
对于这个问题…更新:我最初在“local”数据库中拥有集合,然后使用:db.runCommand({renameCollection:“local.student”,改为:“adaptive db.student”})将其移动到自定义数据库中。但是,当我尝试创建一个全新的数据库,并在其中创建新的集合时,复制效果很好。所以,我想这和“重命名集合”有关。我用rs.conf()@user1437795回答了这个问题,这是有道理的。如果创建一个未被复制的集合,然后重命名数据库,则复制rename命令将导致在从属服务器上执行无效操作(因为没有可重命名的内容)。可能日志中甚至会出现错误/警告。如果不是,您可能应该将其作为MongoDB bug()归档。我甚至会说,让您在replicaSet上从/重命名到本地数据库是一个bug。。。但我对mongo设计并没有深入了解,不知道是否有原因。
rs0:SECONDARY> rs.conf()
{
"_id" : "rs0",
"version" : 7,
"members" : [
{
"_id" : 0,
"host" : "localhost:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
},
{
"_id" : 1,
"host" : "localhost:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
},
{
"_id" : 2,
"host" : "localhost:27019",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : 0,
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatTimeoutSecs" : 10,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
}
}
}