FISCO BCOS的区块链数据,默认是通过RocksDB保存在磁盘中。如果希望把数据保存到MySQL数据库,可以先自行部署一个MySQL数据库。
一、安装mysql或者MariaDB数据库
1. 安装
此处以Centos安装MariaDB为例。MariaDB数据库是 MySQL 的一个分支,MariaDB完全兼容 MySQL,包括API和命令行。
// 安装
sudo yum install -y mariadb*
// 启动
sudo systemctl start mariadb.service
// 停止
// sudo systemctl stop mariadb.service
// 设置开机启动
sudo systemctl enable mariadb.service
// 初始化
// 执行以下命令:
sudo mysql_secure_installation
// 以下根据提示输入:
// Enter current password for root (enter for none):<–初次运行直接回车
// Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
// New password: <– 设置root用户的密码
// Re-enter new password: <– 再输入一次你设置的密码
// Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
// Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车
// Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
// Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
2. 授权访问和添加用户
// 使用root用户登录,密码为初始化设置的密码
mysql -uroot -p -h localhost -P 3306
// 授权root用户远程访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
// 创建test用户并授权本地访问
mysql > GRANT ALL PRIVILEGES ON *.* TO 'test'@localhost IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql > flush PRIVILEGES;
3. 测试连接和创建数据库
// 登录数据库
mysql -utest -p123456 -h localhost -P 3306
// 创建数据库,用来存储区块链的数据
mysql > create database blockchain;
二、修改区块链节点的配置文件
1. 将区块链节点停止
假如安装的的webase-front
启动: bash start.sh
停止: bash stop.sh
检查: bash status.sh
参考文档:https://fintech.webank.com/developer/docs/webase/docs/WeBASE-Install/developer.html
2. 修改节点的配置文件
群组配置文件通常位于区块链节点的配置目录下:conf/group.1.ini
将每个节点中的group.1.ini修改为如下信息
[storage]
type=mysql
db_ip=127.0.0.1
db_port=3306
db_username=数据库账户名,比如我的test
db_name=数据库的名字,比如我的blockchain
db_passwd=数据库账户密码,比如我的123456
3. 启动区块链
启动: bash start.sh
三、在webase-front中编写创建数据表的智能合约
1. 代码
可以参考https://blog.csdn.net/u013288190/article/details/108824439
// 创建成绩表
function create() public onlyOwner returns(int){
TableFactory tf = TableFactory(0x1001);
int count = tf.createTable("stu_score", "student_id", "course_name, score");
emit createEvent(msg.sender, "stu_score");
return count;
}
2. 执行合约
3. 效果
我们可以在命令行中进入到数据库查看