CouchDb数据从1.4迁移到2.0

时间:2016-11-16 11:49:23

标签: couchdb couchdb-futon

我在Windows 8系统上将CouchDB从1.4更新到2.0。 我已经备份了我的数据并从/ var / lib / couchdb查看文件并卸载了1.4。

成功安装2.0并运行。 现在我将所有数据复制到/ var / lib / couchdb和/ data文件夹,但是futon没有显示任何数据库。

我创建了一个新的数据库“test”,它可以在蒲团中访问,但我在/ data目录中找不到它。

配置:

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

另外我想了解:升级是否需要重新编制索引?

2 个答案:

答案 0 :(得分: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:这就是所谓的< i>本地端口从未打算用于生产,但在这里很有帮助。)

由于本地端口不是永久性解决方案,您现在可以启动从本地端口到群集端口的复制(仍然引用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(运行)复制到新的CouchDB,因为您可以在1.x和2.0之间进行复制,就像您可以在1.x和1.x之间复制一样

答案 1 :(得分: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

如果在同一个docker主机上的docker容器中运行源和目标CouchDB,则可能首先检查映射到源容器的docker主机IP,以便允许源容器访问目标容器

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