EOS编译安装,请参考编译EOS主网EOS-Mainnet代码并支持sql_db_plugin
一. 修改Config配置
先运行下nodeos
,将会自动创建~/.local/share/eosio/nodeos/config
目录和config.ini
文件。
修改config.ini
中如下内容
//添加 (2018-8-18 此时可用,如果有想分享的节点,请私聊我)
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = mars.fnp2p.eosbixin.com:443
//修改 可忽略
agent-name = "BcSkill"
//如果需要返回错误信息,修改
verbose-http-errors = true
//添加插件支持
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
plugin = eosio::sql_db_plugin
//修改mongodb插件相关配置
sql_db-uri = mysql://db=eos user=root host=127.0.0.1 password='pwd'
二. 安装配置并启动MySql
1. 安装MySql
先安装MySql 参考 Ubuntu 安装MySql 8.0
2. 配置MySql
- 接下来我们安装 soci。soci 是 C++ 连接 MySQL 的 Library。Ubuntu 可以快速安装,命令如下:
sudo apt-get -y install libsoci-dev
- 安装 mysql-client
sudo apt-get -y install mysql-client sudo apt-get install libmysqlclient-dev
由于链上数据较大,比如1000W块左右的数据,离线压缩包大约14GB,同步到MySql大概需要200GB左右。所以需要将MySql数据单独磁盘存储。
修改MySql数据存储位置,/mnt/data
为我这边挂载的存储盘
新建目录mkdir /mnt/data/MySql
并参考 Ubuntu16.04下修改MySQL数据的默认存储位置
配置Eos数据库
- 进入mysql
mysql -p
- 创建数据库
CREATE DATABASE eos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 查看数据库
mysql > show databases;
三. 下载主网离线数据包
参考 EOS 主网数据更新,离线数据包
因为使用离线包可以加快追上主网的进度,如果从零自己同步到主网进度,难以想象要多久...
假设已经将离线数据下载并解压到了 /mnt/data/data
目录下。
四. 启动nodeos开始同步数据
nodeos --data-dir /mnt/data/data --hard-replay-blockchain --replay-blockchain
第一次运行 必须添加 --replay-blockchain
参数,不然不会创建数据库表,参考下面代码
如果需要清空mysql数据库的话,添加--sql_db-block-start=0 --replay-blockchain
相关代码如下eos\plugins\sql_db_plugin\sql_db_plugin.cpp
void sql_db_plugin::plugin_initialize(const variables_map& options)
{
ilog("initialize");
try {
std::string uri_str = options.at(SQL_DB_URI_OPTION).as<std::string>();
if (uri_str.empty())
{
wlog("db URI not specified => eosio::sql_db_plugin disabled.");
return;
}
ilog("connecting to ${u}", ("u", uri_str));
uint32_t block_num_start = options.at(BLOCK_START_OPTION).as<uint32_t>();
auto db = std::make_unique<database>(uri_str, block_num_start);
if (options.at(HARD_REPLAY_OPTION).as<bool>() ||
options.at(REPLAY_OPTION).as<bool>() ||
options.at(RESYNC_OPTION).as<bool>() ||
!db->is_started())
{
if (block_num_start == 0) {
ilog("Resync requested: wiping database");
if( options.at( RESYNC_OPTION ).as<bool>() ||
options.at( REPLAY_OPTION ).as<bool>()) {
ilog( "Resync requested: wiping database" );
db->wipe();
}
}
}
此时已开始,同步中
五. 服务器建议配置
内存:32GB
存储:1T+