2016-11-16 131 views
2

我在Windows 8系統上將CouchDB從1.4更新到2.0。 我已經備份了我的數據並查看了/ var/lib/couchdb中的文件並已卸載1.4。CouchDb數據從1.4遷移到2.0

安裝2.0成功並運行。 現在我將所有數據複製到/ var/lib/couchdb和/ data文件夾,但蒲團沒有顯示任何數據庫。

我創建了一個新的數據庫「測試」,它可以在蒲團中訪問,但我無法在/ data目錄中找到它。

配置:

default.ini: 
[couchdb] 
uuid = 
database_dir = ./data 
view_index_dir = ./data 

我也想明白:將升級需要重新建立索引?

回答

2

您可能想要查看將數據複製到的節點的本地端口:當您僅複製數據文件時,它可能會工作,但它們會出現在另一個端口(5986而不是5984)。

這意味着:當您複製數據庫文件(那些居住在/_config/couchdb/database_dir規定,並與.couch結束的目錄,報價https://blog.couchdb.org/2016/08/17/migrating-to-couchdb-2-0/這裏)進入的CouchDB 2.0羣集的節點之一的數據目錄(例如, lib/node1/data),數據庫將出現在http://localhost:5986/_all_dbs(注意5986而不是5984:這是所謂的本地端口從來沒有打算用於生產使用,但在這裏有幫助)。

由於本地端口是不是一個永久性的解決方案,您現在就可以開始從本地端口羣集端口複製(報價仍然https://blog.couchdb.org/2016/08/17/migrating-to-couchdb-2-0/ - 假設你正在處理一個名爲mydb導致文件名mydb.couch數據庫):

# create a clustered new mydb on CouchDB 2.0 
curl -X PUT 'http://machine2:5984/mydb' 

# replicate data (local 2 cluster) 
curl -X POST 'http://machine2:5984/_replicate' -H 'Content-type: application/json' -d '{"source": "http://machine2:5986/mydb", "target": "http://machine2:5984/mydb"}' 

# trigger re-build index(es) of somedoc with someview; 
# do for all to speed up first use of application 
curl -X GET 'http://machine2:5984/mydb/_design/_view/?stale=update_after' 

作爲替代方案,你也可以從舊的CouchDB(運行)複製到新的一個,你可以1.x和2.0之間的複製,就像你可以1.x和1.x的

之間複製
0

使用它來遷移CouchDB的所有數據庫database_dir,例如的/ var/lib中/ CouchDB的

# cd to database dir, where all .couchdb files reside 
cd /var/lib/couchdb 

# create new databases in the target instance 
for i in ./*.couch; do curl -X PUT http://machine2:5986$(echo $i | grep -oP '[^.]+(?=.couch)'); done 

# one-time replication of each database from source to target instance 
for i in ./*.couch; do curl -X POST http://machine1:5984/_replicate -H "Content-type: application/json" -d '{"source": "'"$(echo $i | grep -oP '[^./]+(?=.couch)')"'", "target": "http://machine2:5986'$(echo $i | grep -oP '[^.]+(?=.couch)')'"}'; done 

如果你正在運行的來源和相同的泊塢窗主機上的碼頭工人,容器內的目標CouchDB的兩個,你可能會首先檢查被映射到源泊塢窗主機IP容器,以便允許源容器訪問目標容器

/sbin/ip route|awk '/default/ { print $3 }'