mongodb 2.4升级至3.2


-- 单库迁移升级(场景:原来的数据库在mongo 2.4版本中(端口27016),现在现把它迁移到3.2版本中(端口27017),在迁移升级过程中也有数据的变更)

--假设要迁移的数据库为test
--先初始化一部分数据
use test
for(var i=1;i<10000;i++) {db.user.insert({"name":"rudy"+Math.round(Math.random()*1000),"password":"123"+Math.round(Math.random()*100)}) }

--备份之前,查看此时的时间戳
Timestamp(Date.parse(new Date())/1000,1);
Timestamp(1463128620, 1)

--备份出数据
mongodump -o /tmp/backup/dump`date +%Y%m%d` -d test --port 27016

--接着做数据的变更(注意增删改等操作也可能在其它数据中进行)
for(var i=1;i<10;i++) {
var rand=Math.round(Math.random()*1000);
if(i%2==0)
  {db.user.remove({"name":"rudy"+rand})}
}

--将备份出的数据导入到3.2版本中
mongorestore -h 127.0.0.1  --port 27017  --dir /tmp/backup/dump20160516/ 

--依据导出前的时间戳,导出与数据库test有关的oplog(2.4版本),注意导出时的查询条件,以及对"."的双转义
mongodump -h 127.0.0.1 --port 27016 -d local -c "oplog.rs" -q '{"ns":/^test\\./,ts:{$gte:Timestamp(1463128620, 1)}}' -o /tmp/backup/oplog01/

--新起一个实例把oplog导出到新实例中(如果需要循环操作,从第二次起,导入前把oplog.rs清空)
mongorestore -h 127.0.0.1 --port 27019 -d local -c "oplog.rs" --dir /tmp/backup/oplog01/local/oplog.rs.bson

--把oplog导入到3.2版本的数据库中,以实现滚动的数据应用
mongooplog --host=127.0.0.1 --port 27017 --from 127.0.0.1:27019 

--循环从2.4版本导出oplog,在3.2版本中应用oplog的过程,直到应用的连接连接到3.2版本为止

(另注:由于从3.2版本开始mongooplog已经被废弃,要使用mongorestore进行oplog操作)
--由于mongorestore需要的是oplog.bson,故需要对备份出来的oplog重命名
cp /tmp/backup/oplog01/local/oplog.rs.bson /tmp/backup/oplog01/local/oplog.bson
--指定oplogReplay参数对oplog进行重放(注意此时不需要 -d local -c "oplog.rs" 参数,因为其只会把oplog导入到local数据库中,但不对oplog进行重放)
mongorestore -h 127.0.0.1 --port 27017 --oplogReplay --dir /tmp/backup/oplog01/local/

--循环从2.4版本导出oplog,在3.2版本中应用oplog的过程,直到应用的连接连接到3.2版本为止

--mongorestore升级过程中如果遇到如下错误,需要删除admin数据库
[root@beta tmp]# mongorestore -h 127.0.0.1 --oplogReplay --port 27015 --dir /tmp/dump20160411/
2016-04-11T16:36:14.026+0800    building a list of dbs and collections to restore from /tmp/dump20160411 dir
2016-04-11T16:36:14.039+0800    assuming users in the dump directory are from <= 2.4 (auth version 1)
2016-04-11T16:36:14.040+0800    Failed: the users and roles collections in the dump have an incompatible auth version with target server: cannot restore users of auth version 1 to a server of auth version 5

--删除admin数据库,可以正确还原数据库从2.4至3.2
[root@beta dump20160411]# rm -rf admin/
[root@beta dump20160411]# mongorestore -h 127.0.0.1 --oplogReplay --port 27015 --dir /tmp/dump20160411/

--同样的数据在3.2版本中压缩比比在2.4中多10倍以上
[root@beta mongodb]# du -sh *
35G     27014 (2.4版本)
3.1G    27015 (3.2版本)

 --从mongo2.6开始,mongo限制索引的大小不能超过1MB(之前的版本是索引无效),否则其会报错
 Failed: messaging.messageHistory: error creating indexes for messaging.messageHistory: createIndex error: WiredTigerIndex::insert: key too large to index, failing  2001
 { : "环境后台出现错误: org.springframework.validation.BeanPropertyBindingResult: 4 errors Field error in object 'flightWhiteSearchRequirment' on fi..." }

The total size of an index entry, which can include structural overhead depending on the BSON type, must be less than 1024 bytes.
MongoDB will not create an index on a collection if the index entry for an existing document exceeds the index key limit. Previous versions of MongoDB would create the index but not index such documents.

--查看索引中字段最长的 _id
var max_id=null;
var max_title_length=1;
db.messageHistory.find().forEach(function(doc){if(doc.title.length>max_title_length) {max_title_length=doc.title.length; max_id=doc._id;} });

--此时有两种解决方法,
一是在 mongorestore 中加上 noIndexRestore 不恢复索引,注意此时意味着恢复完成后要手动对每一个数据库的每一个文档重建索引
一是在 编辑 collection.metadata.json 文件,把与那个索引有关的语句删除掉

时间: 2024-10-25 08:57:44

mongodb 2.4升级至3.2的相关文章

python操作mongodb根据

  本文实例讲述了python操作mongodb根据_id查询数据的实现方法.分享给大家供大家参考.具体分析如下: _id是mongodb自动生成的id,其类型为ObjectId,所以如果需要在python中通过_id查询,就需要转换类型 如果pymongo的版本号小于2.2,使用下面的语句导入ObjectId ? 1 from pymongo.objectid import ObjectId 如果pymongo的版本号大于2.2,则使用下面的语句 ? 1 from bson.objectid

MySQL和MongoDB设计实例对比

MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚.下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里面除了包含手机的名称,品牌等基本信息,还包含了待机时间,外观设计等参数信息,应该如何存取数据呢? 如果使用MySQL的话,应该如何存取数据呢? 如果使用MySQL话,手机的基本信息单独是一个表,另外由于不同手机的参数信息差异很大,所以还需要一个参数表来单独保存. CREATE TABLE IF NOT EXISTS `mobiles` (     `id` 

MongoDB · 特性分析 · MMAPv1 存储引擎原理

MongoDB 的 mongod 服务管理一个数据目录,可包含多个DB,每个DB的数据单独组织,本文主要介绍 MMAPv1 存储引擎的数据组织方式. Database 每个 Database(DB) 由一个.ns文件及若干个数据文件组成 $ll mydb.* -rw------- 1 ydzhang staff 67108864 7 4 14:05 mydb.0 -rw------- 1 ydzhang staff 16777216 7 4 14:05 mydb.ns 数据文件从0开始编号,依次

Windows下Mongodb安装及配置

参考:http://blog.csdn.net/mzbonnt/article/details/51461331#comments **欢迎加入疯狂源代码学习.QQ群127591054 工作中遇到了,所以学习下.** 这里装的是最新的 安装文件:mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.msi 电脑配置:win10 64位 mongodb的安装很简单,设置好安装路径后,一直Next直到安装结束. 最大的坑就是MongoDB服务的安装,下面具体说

mongodb WriteConcern

Java代码   http://www.reader8.cn/jiaocheng/20130826/1875289.html   Java代码       (1)不安全的操作 a)ERRORS_IGNORED:只是将消息发出,忽略一切错误,甚至网络错误也不理会. b)UNACKNOWLEDGED:将消息发送给socket即返回,不确保数据写入到数据库,因此发生网络错误时会有提示.默认值. (2)处于弱状态 a)ACKNOWLEDGED:确保已将数据写入到shard中的主节点中,这时如果有针对主节

MongoDB:副本集出现大量authenticate db日志

问题描述 MongoDB:副本集出现大量authenticate db日志 Sun Jan 11 00:15:06.082 [conn34] authenticate db: local { authenticate: 1, nonce: "b0d836d66e2ae743", user: "__system", key: "8c947498e52c2d06dedbef54493b2d59" } Sun Jan 11 00:15:08.987 [

Use mongodb 1.8.1&#039;s replicaSet with auth,journal,keyFile feature

MongoDB replicSet 1.8.1 产品部署推荐: 1. 文件系统加载时使用参数noatime 2. no VM PAGEs 3. 推荐使用逻辑卷,文件系统推荐ext4或xfs 4. 3个full nodes 或 2个full nodes+1个arbiter node (最好是奇数个物理服务器,否则仲裁会有问题,例如两台物理机,两个mongod进程,相互网络不通的话,任何一台都无法达到majority,因此都无法成为primary.那就是只读了.因此本例的物理服务器只有2台是不合理的

ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方

原以为只要在Visual Studio 2012中将每个项目的Target framework设置为.NET Framewor 4.5进行编译,然后在web.config中设置compilation的targetFramework为4.5,就升级到了ASP.NET 4.5. <compilation targetFramework="4.5"/> 后来发现这样是不够的,还需要在web.config中设置httpRuntime的targetFramework. <htt

关于mongodb按照字段模糊查询方法

关于mongodb按照字段模糊查询方法   模糊查询:tname包含某个关键字测试' cd /opt/soft/mongodb/bin ./mongo --host 192.168.0.1  --port 17017  test db.test_info.find({"tname": {$regex: '测试', $options:'i'}})  db.test_info.find({"tname": {$regex:/测试.*/i}})