1. 程式人生 > >mongodb 2.4升級至3.2

mongodb 2.4升級至3.2


--mongorestore升級過程中如果遇到如下錯誤,需要刪除admin資料庫
[[email protected] 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
[
[email protected]
dump20160411]# rm -rf admin/ [[email protected] dump20160411]# mongorestore -h 127.0.0.1 --oplogReplay --port 27015 --dir /tmp/dump20160411/ --同樣的資料在3.2版本中壓縮比比在2.4中多10倍以上 [[email protected] 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 檔案,把與那個索引有關的語句刪除掉 -- 單庫遷移升級(場景:原來的資料庫在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版本為止

相關推薦

mongodb 2.4升級3.2

--mongorestore升級過程中如果遇到如下錯誤,需要刪除admin資料庫 [[email protected] tmp]# mongorestore -h 127.0.0.1 --oplogReplay --port 27015 --dir /tmp/d

zabbix 2.4.5升級3.2.6總結

zabbix1、如果php版本小於5.6,需要升級到5.6以上。2、保存數據庫不變,當zabbix server或zabbix proxy升級後啟動時會自動更新數據庫。3、整個架構的zabbix server 和 zabbix proxy都要同時升級。4、如果升級後新增到proxy的機器無法識別,先重啟pro

elasticsearch 6.2 版本升級6.4 版本服務啟動報錯

client 所有 share 步驟 secret jar 自動 pex nta 升級後發現es服務無法啟動,發現報錯如下: 升級原因:kibana 升級至6.4 無法正常啟動連接 6.2 版本es集群數據; x-pack 插件錯誤: [2018-09-19T17:12:5

mybatis 從3.2.8升級3.4.5,攔截器 SqlInterceptor需要改動的地方

SqlInterceptor implements Interceptor 需要改動的點 @Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = {

Guns 5.1使用Mybatis-plus從2.3升級3.0.6填坑指南

Guns 5.1下載地址和具體描述:https://gitee.com/stylefeng/guns Guns基於SpringBoot 2,致力於做更簡潔的後臺管理系統,完美整合springmvc + shiro + mybatis-plus + beetl!Guns專案程式碼簡潔,註釋豐富

阿里雲ECS CentOS 2.6版本核心升級3.10

當前有部分應用對系統核心版本有一定的要求,比如Docker要求核心版本在3.10以上,雲伺服器中提供的Centos 7以下的阿里雲官方公共映象是2.6以下。雖然更換系統到Centos 7可以滿足要求,但是更換系統後對業務環境重新部署會消耗一定時間和人力成本,因此可以考慮針

linux核心2.6升級3.11.4

檢查當前版本 [[email protected]~]$ uname -r 2.6.32-279.el6.x86_64 檢視當前的/boot/grub/grub.conf內容: 下面使用root使用者操作: [[email protected]~]#

linux6.4核心由2.6升級3.6

安裝CentOS 6.4之後,核心預設是2.6.32。由於docker需要3.0以上的核心,所以需要對核心進行升級。 1. 安裝必要元件# yum -y install ncurses-devel # 後續的make menuconfig依賴於該元件 2. 下載合適的原始碼包並解壓# wget -c ht

centos 6.9 升級python 2.6.6 3.5.0

1、下載python3.5 wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz 解壓 tar zxvf Python-3.5.0.tgz 進入目錄 cd Python-3.5.0 配置 ./c

一、centos6.6安裝Docker 1.7.1 / linux核心2.6升級3.11.4

Docker官網上針對Centos的的安裝需求如下: Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at min

1 Ambari從Postgresql8.4升級到9.2

rom pg_dump 恢復數據 執行 times 環境配置 cal chown password 1.1 安裝Postgresql9.21) 安裝依賴安裝readline-devel.x86_64 0:6.0-4.el6和ncurses-devel.x86_64 0:

kibana 6.2.4 升級 6.4.2

system 服務器 serve 新版本 yml 刪除 arc sof last kibana 6.2.4 升級 6.4.2 升級前提: 後端 elasticsearch 集群版本已經升級至 6.4.2 版本. 升級前先查看版本: /usr/share/kibana/bi

Android Studio升級3.2後部分第三方庫引入報紅

Android Studio升級到3.2後引入的第三方庫會出現報紅的現象,如圖: 雖然不影響編譯,但是這樣總歸是不爽, 原因:原因是我們的build.gradle中的dependencies--classpath版本太低如: classpath 'com.android.too

【Zabbix】ZABBIX3.0升級3.2步驟

1.停止zabbix服務 service zabbix_server stop service zabbix_agentd stop /usr/local/zabbix/sbin/zabbix_java/shutdown.sh 2.儲存配置檔案 mv /usr/local/za

php-5.4 升級到 php7.2

# 編譯 ./configure --prefix=/alidata/server/php72 --with-config-file-path=/alidata/server/php72/etc --enable-inline-optimization --di

androidstudio2.3升級3.2遇到的坑

androidstudio2.3升級到3.2 好久不做安卓的專案了,公司今天需要對原來的安卓專案進行升級維護。下載新版的androidstudio3.2版本用的是gradle4.5。distributionUrl=https\://services.gradle.o

linux mongodb3.6降級3.2

1.首先準備好降級包 http://dl.mongodb.org/dl/linux  3.4  3.2 版本各一份 2. 3.6降級為3.4 解壓3.4版本的包:tar zxvf mongodb-linux-x86_64-3.4.10.tgz 進入原3.6的mongodb:原3.

CentOS 7從Python 2.7升級Python3.6.x

1.  環境介紹    Centos 7,   當前的Python版本2.7.12   >> uname -a     >> cat /etc/os-release 2. 下載Python 3.x的安裝包    預設Linux的安裝包

CentOS 7從Python 2.7升級Python3.6.1

引言: Centos是目前最為流行的Linux伺服器系統,其預設的Python 2.x,但是根據python社群的規劃,在不久之後,整個社群將向Python3遷移,且將不在支援Python2, 那該如何平滑遷移至Python3 呢? 1.  環境介紹    Centos

linux上python 2.7 升級3.5

1.下載python3.5.2的包 wegt https//www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 2.解壓包 tar -zxvf Python-3.5.2.tgz 3.執行./configure cd Python-3.