【问题标题】:CouchDb data migration from 1.4 to 2.0CouchDb 数据从 1.4 迁移到 2.0
【发布时间】:2017-03-30 14:37:50
【问题描述】:

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

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

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

配置:

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

我还想了解:升级是否需要重新索引?

【问题讨论】:

    标签: couchdb couchdb-futon


    【解决方案1】:

    您可能想查看将数据复制到的节点的本地端口:当您仅复制数据文件时,它可能会起作用,但它们会出现在另一个端口(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(正在运行)复制到新的 CouchDB,因为您可以在 1.x 和 2.0 之间复制,就像您可以在 1.x 和 1.x 之间复制一样

    【讨论】:

      【解决方案2】:

      使用它来迁移驻留在 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 和目标 CouchDB,您可能首先检查映射到源容器的 docker 主机 IP,以允许源容器访问目标容器

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多