Data-Stash数据备份操作
基本概念
Scalable存储模式
节点群组配置scalable存储模式后,将账本数据和状态数据分开存储,账本数据保存在nodeX/data/groupX/block/Scalable/blocksDB/目录下,状态数据保存在nodeX/data/groupX/block/Scalable/state目录下,其中账本数据可以被删除,状态数据不能被删除
Binlog日志
binlog文件记录了每个区块的每个交易对区块链状态的修改结果,存放在nodeX/data/groupX/BinaryLogs/目录下。每个binlog文件以其记录的首个区块内容进行命名,且按从小到大的顺序来记录区块,每个binlog文件128MB,由程序内部设定。binlog机制的作用在于:
- 提供了区块维度的数据操作结果的记录;
- 节点可通过binlog文件而非通过原有的拉取区块重放交易的方式来恢复数据;
- binlog文件为“数据仓库”的快照构建提供数据来源。
操作流程
- 节点配置
- 编辑节点目录下conf/group.1.ini
- 设置群组的ini配置文件中[storage].type=scalable来选择链的存储模式为scalable,以实现本节点数据冷热分离。
- 设置群组的ini配置文件中[storage].binary_log=true来启用生成binlog的配置,以使数据仓库组件的下载服务可以通过nginx代理下载binlog,解析后存储在数据仓库。
- 运行节点启动脚本./start.sh,启动节点
注:
由于数据仓库组件用于生成节点的全量备份,所以要求节点拥有包括第一个区块在内的完整 binlog 日志,故需要确保该节点加入 FISCO BCOS 网络前就开启 binlog 生成选项。如果节点已经在运行中,先停止该节点,并删除对应群组(以 group1 为例 ,删除节点目录下data/group1)的数据,作为一个新节点启动。
- binlog 日志 nginx 代理配置
节点的 binlog 日志存放在节点文件目录中,为了让外界能够访问这些 binlog ,现需要在节点所在服务器安装 nginx 并配置端口映射,这样外界即可根据该端口访问 binlog 。
server {
listen [端口号];
server_name [服务器地址];
charset utf-8;
location / {
root [binlog目录绝对路径];
index index.html index.htm;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置完成,可以通过浏览器访问http://ip:端口号访问binlog日志
- 数据仓库配置
- 拉取源码
git clone https://github.com/WeBankBlockchain/Data-Stash.git
# 也可以使用国内源
git clone https://gitee.com/WeBankBlockchain/Data-Stash.git
- 编译源码
cd Data-Stash
./gradlew clean bootJar
- 启动配置
在启动之间还需要进行配置,主要包括:
- binlog 获取端口
- 数据库连接配置
需要在dist/config/application.properties中进行配置,示例如下:
### 配置nginx服务的binlog地址,如果连接多个节点的话,使用逗号分隔
system.binlogAddress=http://www.example.com:5299/,http://www.example.com:5300/
### 数据库连接配置
#### 禁用分库分表
spring.shardingsphere.enabled=false
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/stash?autoReconnect=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.jdbc.Driver
- 运行程序
chmod +x *sh
bash start.sh
注:
Data-Stash并不会自动创建数据库,所以需要预先建好数据库,默认情况下数据库名为stash。