hyperledger-fabric之couchdb数据库备份和迁移

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
将此目录下的文件备份到你的备份目录即可。恢复时,直接使用这批文件即可。
 
linux下文件夹以及子目录、文件的权限问题可以这么解决:
couchdb恢复时需要授权,如:
chown -R couchdb:couchdb couchdb
或者:
chgrp -R couchdb couchdb
 
命令解释:
chgrp和chown 的都是转移文件属主,但是chown只能在同一个用户组里面转换而chgrp可以转移到不同的用户组
参数R是递归执行授权
 
chown -R 用户:组 文件夹
chgrp -R 组 文件夹

 

由于 Hyperledger-Fabric 是一个底层的区块链框架,它的系统架构比较复杂,包括了多个组件和模块。下面是一个简化的 Hyperledger-Fabric 系统架构图: ![Hyperledger-Fabric 系统架构图](https://i.imgur.com/A8I6NuL.png) 从图中可以看出,Hyperledger-Fabric 的系统架构主要包括以下组件和模块: - 客户端(Client):客户端是区块链系统的使用者,可以通过 SDK 与区块链网络进行交互,包括提交交易、查询数据等操作。客户端可以是 Web 应用程序、移动应用程序、IoT 设备等。 - 区块链网络(Blockchain Network):区块链网络由多个 Peer 和一个 Ordering Service 组成,每个 Peer 都有自己的账本,用于保存区块链上的交易记录和状态数据。 - Peer 节点(Peer Node):Peer 节点是区块链网络的核心,它可以执行智能合约、验证交易,并将交易记录和状态数据保存到自己的账本中。Peer 节点之间可以相互通信和交互数据,还可以进行背书(Endorsement)操作,即对交易进行签名,用于确保交易的真实性和合法性。 - Ordering Service 节点(Ordering Service Node):Ordering Service 节点是区块链网络的一部分,负责将交易打包成区块,并将区块传播到所有的 Peer 节点。Ordering Service 节点可以使用不同的共识算法来处理交易,例如 Kafka、Raft 等。 - 智能合约(Smart Contract):智能合约是 Hyperledger-Fabric 的核心概念,它是一段可编程的代码,用于对交易进行处理和执行。智能合约可以使用不同的编程语言编写,例如 Go、Java、JavaScript 等。 - 认证和授权服务(Authentication and Authorization Service):认证和授权服务是用于验证客户端和 Peer 节点身份的服务,它可以使用不同的身份验证协议和技术,例如 TLS、PKI 等。 - 数据库(Database):Hyperledger-Fabric 使用不同的数据库系统来保存交易记录和状态数据,例如 LevelDB、CouchDB 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值