2016-11-16 130 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 }'