您正在查看: Other 分类下的文章

Failed to find shared library for backend ”mysql

编译好sql_db_plugin后启动nodeos

root@iZ2zea5mjpcmz9m17k56daZ:/home/surou/Documents/github/eos/build# nodeos --sql_db-uri=”mysql://db=eos user=root host=127.0.0.1 password='数据库密码' --sql_db-block-start=0  --delete-all-blocks
2018-07-25T12:39:28.628 thread-0   sql_db_plugin.cpp:81          set_program_options  ] set_program_options
2018-07-25T12:39:28.629 thread-0   chain_plugin.cpp:271          plugin_initialize    ] initializing chain plugin
2018-07-25T12:39:28.629 thread-0   chain_plugin.cpp:408          plugin_initialize    ] Deleting state database and blocks
2018-07-25T12:39:28.721 thread-0   chain_plugin.cpp:508          plugin_initialize    ] Starting up fresh blockchain with default genesis state.
2018-07-25T12:39:29.437 thread-0   http_plugin.cpp:344           plugin_initialize    ] configured http to listen on 127.0.0.1:8888
2018-07-25T12:39:29.437 thread-0   net_plugin.cpp:2941           plugin_initialize    ] Initialize net plugin
2018-07-25T12:39:29.437 thread-0   net_plugin.cpp:2966           plugin_initialize    ] host: 0.0.0.0 port: 9876 
2018-07-25T12:39:29.437 thread-0   net_plugin.cpp:3036           plugin_initialize    ] my node_id is e5f1d9687a24d343c57e7ba32913db448147a2e9e7dc1fe12797a69c082e1c9a
2018-07-25T12:39:29.437 thread-0   wallet_plugin.cpp:42          plugin_initialize    ] initializing wallet plugin
2018-07-25T12:39:29.437 thread-0   sql_db_plugin.cpp:96          plugin_initialize    ] initialize
2018-07-25T12:39:29.437 thread-0   sql_db_plugin.cpp:104         plugin_initialize    ] connecting to ”mysql://db=eos
2018-07-25T12:39:29.438 thread-0   main.cpp:141                  main                 ] Failed to find shared library for backend ”mysql

Failed to find shared library for backend ”mysql 错误。
查看EOS代码 eos\programs\nodeos\main.cpp:141

   } catch( const std::runtime_error& e ) {
      if( std::string(e.what()) == "database dirty flag set" ) {
         elog( "database dirty flag set (likely due to unclean shutdown): replay required" );
         return DATABASE_DIRTY;
      } else if( std::string(e.what()) == "database metadata dirty flag set" ) {
         elog( "database metadata dirty flag set (likely due to unclean shutdown): replay required" );
         return DATABASE_DIRTY;
      } else {
         elog( "${e}", ("e",e.what())); // :141
      }
      return OTHER_FAIL;
   } catch( const std::exception& e ) {

应该出在sql_db_plugin中的soci连接中
下载soci源代码

git clone https://github.com/SOCI/soci.git

查看错误出现在

// non-synchronized helper
void do_register_backend(std::string const & name, std::string const & shared_object)
{
    // The rules for backend search are as follows:
    // - if the shared_object is given,
    //   it names the library file and the search paths are not used
    // - otherwise (shared_object not provided or empty):
    //   - file named libsoci_NAME.so.SOVERSION is searched in the list of search paths

    soci_handler_t h = 0;
    if (shared_object.empty() == false)
    {
        h = DLOPEN(shared_object.c_str());
    }
    else
    {
        // try system paths
        h = DLOPEN(LIBNAME(name).c_str());
        if (0 == h)
        {
            // try all search paths
            for (std::size_t i = 0; i != search_paths_.size(); ++i)
            {
                std::string const fullFileName(search_paths_[i] + "/" + LIBNAME(name));
                h = DLOPEN(fullFileName.c_str());
                if (0 != h)
                {
                    // already found
                    break;
                }
             }
         }
    }

    if (0 == h)
    {
        throw soci_error("Failed to find shared library for backend " + name);
    }

发现刚才出现此问题是因为输入的参数符号错误导致,问题停止跟进,以后在遇到类似的再跟进....

Ubuntu 安装MySql 8.0

首先清理干净本地的旧版Mysql

关闭apparmor

sudo /etc/init.d/apparmor stop

关闭mysql

sudo /etc/init.d/mysql stop

删除旧版本

sudo apt-get remove --purge mysql-\*
sudo find  / -name mysql -print //手动删除遗留文件  sudo rm -rf somedir
sudo apt-get remove --purge libmysqlclien\*
sudo apt-get remove apparmor
sudo apt autoremove

添加MySQL Apt存储库

目前已经有了现成可用于安装 MySQL Server、客户端和其它组件的 APT 存储库,我们需要先将 MySQL 存储库添加到 Ubuntu 18.04 的软件包源列表中:

  • 先使用 wget 下载存储库软件包:
    wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb
  • 然后使用以下 dpkg 命令安装下载好的 MySQL 存储库软件包:
    sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb

    注意:在软件包安装过程中,系统会提示您选择 MySQL 服务器版本和其他组件,例如群集、共享客户端库或配置要安装 MySQL 的工作台。
    默认 MySQL 服务器版本 mysql-8.0 的源将被自动选中,我们只需最终确定就可以完成发行包的配置和安装。

    在Ubuntu 18.04中安装MySQL 8服务器

    从所有已配置的存储库(包括新添加的 MySQL 8存储库)中下载最新的软件包信息:

    sudo apt update

    然后运行如下命令安装 MySQL 8 社区服务器、客户端和数据库公用文件:

    sudo apt-get install mysql-common mysql-server

    通过安装过程,将会要求为 MySQL 8 服务器的 root 用户输入密码,在输入和再次验证后按回车继续。

    再次输入密码

    此后,需要选择将要使用的默认身份认证插件,选择好之后按回车即可完成程序包配置。

身份认证插件有如下 2 种可供选择:

  • 使用存储密码加密(推荐)
  • 使用传统认证模式(MySQL 5.x 兼容)

问题

如果出现依赖问题

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.23-0ubuntu10) ...
Errors were encountered while processing:
 mysql-community-server
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

检查下依赖

sudo apt-get install -f

将 Ubuntu 16.04 LTS 升级到 Ubuntu 18.04 LTS

在升级之前, 您应该先更新当前的16.04. 建议升级之前更新/升级所有已安装的软件包.

  • 运行以下命令
    sudo apt update && sudo apt dist-upgrade && sudo apt autoremove
  • 安装Ubuntu update manager
    更新完 系统后,运行以下命令安装update-manager-core(如果您没有安装).
    sudo apt-get install update-manager-core
  • 打开update-manager配置文件并确保提示行设置为 lts
    sudo nano /etc/update-manager/release-upgrades

  • 执行升级命令:
    sudo do-release-upgrade -d
  • 当屏幕出现升级提示是 选择y
    等待所有的软件包下载...安装...到重启...
    当安装完成后,你的系统就升级到最新的Ubuntu开发版本

ubuntu添加新用户

新购买的云服务器只有root帐号,但部署EOS时,非常不建议使用root权限运行,以免因为EOS出现未知BUG导致。。

1. 创建新用户

sudo adduser username

2. 赋予新用户sudo权限

用adduser创建后的新用户是不能使用sudo的,因为还没有赋予相关root权限,执行以下代码赋予权限

sudo usermod -a -G adm username
sudo usermod -a -G sudo username

3. 删除用户

当需要删除用户时可以使用以下指令

sudo userdel -r username

这个指令会删除用户username并把该用户下的所有文件(/home/username/路径下的所有文件)都删除,若要保留这些文件而仅仅删除用户,可使用以下指令

sudo userdel username

ps:(可查看/etc/group文件来查看各用户组情况)

thinkPhp5 连接 EOS中MongoDb

由于需要使用PHP开发api thinkPhp5连接EOS的mongo db数据,所以有此文
部署好PHP环境,放置好thinkPhp5项目后,修改数据库配置
编辑/var/www/application/database.php

return [
    'type'            =>  '\think\mongo\Connection',
    'hostname'        => '127.0.0.1',
    'database'        => 'eosmain',
    'username'        => '', //eos 环境部署的mongo db默认没有用户名和密码,只能本地访问
    'password'        => '',
    'hostport'        => '27017',

推荐文章: