1介绍
CouchDB的优势之一是能够同步同一数据库的两个副本。这使用户可以跨多个节点或数据中心分布数据,还可以将数据更紧密地移到客户端。
复制涉及源数据库和目标数据库,它们可以位于相同或不同的CouchDB实例上。复制的目的是在过程结束时,源数据库上的所有活动文档也都在目标数据库中,并且在源数据库中删除的所有文档也在目标数据库上被删除(如果它们存在)
couchdb复制模式为两种:1瞬时复制模式:在服务器终止或者重启的情况下复制将终止 2、持久性复制:
引入了_replicator数据库,在第二次触发的过程中可以继续复制,它拥有着复制的文档备份。
2简单的复制迁移步骤
couchdb在设置页面中单独设置了一个复制器供我们使用,访问couchdb设置页面
新建一个复制任务
3 文件夹迁移备份
我的couchdb局域网地址是192.168.1.68,端口5984
先看下如何连接到couchdb:
curl -X GET http://192.168.1.68:5984
>> {"couchdb":"Welcome","version":"1.0.1"}
创建一个数据库hy
curl -X PUT http://192.168.1.68:5984/hy
>> {"ok":true}
创建数据库BTV
curl -X PUT http://192.168.1.68:5984/BTV
>> {"error":"illegal_database_name","reason":"Only lowercase characters (a-z), digits (0-9), and any of the characters _, $, (, ), +, -, and / are allowed. Must begin with a letter."}
注意:看吧,这里的数据名不可使用大写字母组成的字符串。
创建数据库btv
curl -X PUT http://192.168.1.68:5984/btv
>> {"ok":true}
列出当前所有的数据库
curl -X GET http://192.168.1.68:5984/_all_dbs
>> ["btv","hy","_users"]
删除btv数据库
curl -X DELETE http://192.168.1.68:5984/btv
{"ok":true}
删除成功
再列出所有数据库
curl -X GET http://192.168.1.68:5984/_all_dbs
["hy","_users"]
ok,现在在hy下添加一条数据
首先,获取一个uuid
curl -X GET http://192.168.1.68:5984/_uuids
>> {"uuids":["1925a2a284289df9b55b390525001ca1"]}
然后使用这个uuid作为键插入一条数据
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525001ca1 -d '{"title":"test","content":"this is test!"}'
>> {"ok":true,"id":"1925a2a284289df9b55b390525001ca1","rev":"1-4d3e6350fdcc39f7b482c4cab8ff5d9a"}
现在更新这条记录:
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525001ca1 -d '{"title":"test","content":"this is test!modifyied!"}'
>> {"error":"conflict","reason":"Document update conflict."}
失败了。因为,couchdb是按版本提交的,同一个源提交多次会造成一定的混乱。所以,其采用了版本进行控制。
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525001ca1 -d '{"_rev":"1-4d3e6350fdcc39f7b482c4cab8ff5d9a","title":"test","content":"this is test!"}'
>> {"ok":true,"id":"1925a2a284289df9b55b390525001ca1","rev":"2-f6f24194b29981316f2412e288cda320"}
这样就没有问题了。
接下来获取刚刚插入的那条记录:
curl -X GET http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525001ca1
>> {"_id":"1925a2a284289df9b55b390525001ca1","_rev":"2-f6f24194b29981316f2412e288cda320","title":"test","content":"this is test!"}
接下来,插入几条数据进去:
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525002c29 -d '{"title":"gogogo","content":"gototototototo!"}'
>> {"ok":true,"id":"1925a2a284289df9b55b390525002c29","rev":"1-4a1158c264f8cc636e1fc54a7a696de6"}
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b390525003b13 -d '{"title":"vasdfasdfasd","content":"1111111111111111111111!"}'
>> {"ok":true,"id":"1925a2a284289df9b55b390525003b13","rev":"1-aef44b1ea026ee6d3a3b7f4d8f9e9fe8"}
curl -X PUT http://192.168.1.68:5984/hy/1925a2a284289df9b55b39052500450b -d '{"title":"ffffffffff","content":"22222222222222222222!"}'
>> {"ok":true,"id":"1925a2a284289df9b55b39052500450b","rev":"1-a39102efd95dc72be9b3a85b0fa79a3e"}
列出hy库下的所有文档:
curl -X GET http://192.168.1.68:5984/hy/_all_docs
>> {"total_rows":4,"offset":0,"rows":[
{"id":"1925a2a284289df9b55b390525001ca1","key":"1925a2a284289df9b55b390525001ca1","value":{"rev":"2-f6f24194b29981316f2412e288cda320"}},
{"id":"1925a2a284289df9b55b390525002c29","key":"1925a2a284289df9b55b390525002c29","value":{"rev":"1-4a1158c264f8cc636e1fc54a7a696de6"}},
{"id":"1925a2a284289df9b55b390525003b13","key":"1925a2a284289df9b55b390525003b13","value":{"rev":"1-aef44b1ea026ee6d3a3b7f4d8f9e9fe8"}},
{"id":"1925a2a284289df9b55b39052500450b","key":"1925a2a284289df9b55b39052500450b","value":{"rev":"1-a39102efd95dc72be9b3a85b0fa79a3e"}}
]}
备份:
1、使用futon的replica进行同步复制,这个就不用介绍了。
2、在couchdb下找到data目录,可以直接将你的数据库文件拷贝到对应的备份目录下。恢复时,直接将这些文件拷贝过去即可。如果你没有使用index,那么你无须拷贝index目录下的文件。
注意:在做第二种恢复方式时,linux下需要考虑文件的权限问题。
就像这样:
我的数据目录位置:/usr/local/var/lib/couchdb
将此目录下的文件备份到你的备份目录即可。恢复时,直接使用这批文件即可。