DBGateway常见问题

本文介绍DBGateway的目录结构、基本操作和常见问题处理。

DBGateway目录结构

dbgateway
|-- bin
|   |-- dbgateway
|   \-- dbgateway-manager
|-- conf
|   |-- dbgateway.conf
|   \-- server.crt
\-- log
    |-- dbgateway.err
    |-- dbgateway.log
    \-- dbgateway_manager.log    
说明
  • bin目录下包含dbgateway(主程序)和dbgateway-manager(DBGateway管理脚本,用于维护DBGateway)。

  • conf目录下包含dbgateway.conf(DBGateway配置文件)和server.crt(通信公钥)。

  • log目录下包含dbgateway.err(DBGateway错误输出)、dbgateway.log(DBGateway的日志)和dbgateway_manager.log(DBGateway管理脚本日志)。

DBGateway的基本操作

  • 查看DBGateway日志

    • DBGateway日志文件全路径为:/opt/dbgateway/log/dbgateway.log。

    • 日志文件以文本格式存储,因此可以用vim、tail、cat和less等常规工具查看日志。

    当DAS产品客服或技术人员需要您提供DBGateway日志辅助排查问题时,可以登录部署DBGateway的服务器使用以下命令,查看最近200条日志,并将这些日志提供给产品客服或技术人员。

    tail -n 200 /opt/dbgateway/log/dbgateway.log
  • 判断DBGateway进程是否正在运行

    1. 登录DAS控制台

    2. 在左侧导航栏中,单击DBGateway管理

    3. DBGateway管理界面,查看目标DBGateway的当前状态

      当前状态显示正常时,表示DBGateway进程正在运行,否则请在部署DBGateway的服务器上执行以下命令:

      /opt/dbgateway/bin/dbgateway-manager -d status
      • 当DBGateway进程正在运行时,返回:

        DBGateway is running.
      • DBGateway进程不存在时,返回:

        DBGateway is dead.
      说明

      本步骤只用于判断DBGateway进程是否正在运行,无法判断其是否正常工作。

  • 重启DBGateway

    1. 依照上述步骤,判断DBGateway进程是否正在运行。

    2. 重启DBGateway。

      • DBGateway进程正在运行时:

        • DBGateway管理界面,单击目标DBGateway操作列的管理 > 重启

        • 在部署DBGateway的服务器上执行以下命令:

          /opt/dbgateway/bin/dbgateway-manager -d restart
      • DBGateway进程不存在时:

        此时无法在DAS控制台界面上操作,仅支持使用命令重启。在部署DBGateway的服务器上执行以下命令:

        /opt/dbgateway/bin/dbgateway-manager -d restart
  • 升级DBGateway

    DBGateway管理界面,单击目标DBGateway操作列的管理 > 升级

  • 停止DBGateway

    • DBGateway管理界面,单击目标DBGateway操作列的管理 > 停止

    • 在部署DBGateway的服务器上执行以下命令:

       /opt/dbgateway/bin/dbgateway-manager -d stop
  • 删除DBGateway

    说明
    • 删除DBGateway后,与之相关的数据库实例的DAS所有功能将无法使用。

    • 当前状态正常的DBGateway无法直接删除,请先停止该DBGateway后再进行删除。

    1. DBGateway管理界面,单击目标DBGateway操作列的管理 > 删除

    2. 可选:在部署DBGateway的服务器上执行如下命令删除DBGateway安装目录。

      rm -rf /opt/dbgateway
  • 重装DBGateway

    删除DBGateway后,使用接入数据库实例时由DAS控制台获取的部署命令,在目标服务器重新部署DBGateway。

DBGateway部署问题排查

使用集中模式的数据库网关或者使用主机模式的数据库网关接入数据库实例时,可以获取部署DBGateway的命令。本文以如下部署命令为例,其中vpcID及token仅用于举例,实际使用中请以获取的部署命令为准。

  • 无法下载DBGateway部署脚本

    • 如果出现wget command not found提示,说明当前系统中缺少wget命令,请使用以下命令安装wget

      sudo apt-get install wget

      yum -y install wget
    • 检查当前服务器的网络是否与阿里云OSS网络连通。

      在当前服务器中ping阿里云OSS的域名。本文中,以hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com为例,实际使用中请以获取的部署命令为准。

      ping hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com
      • 如果返回如下内容,说明域名无法解析,请检查您的DNS解析服务器设置是否正确,且其域名解析是否正常工作。

        ping: unknown host hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com  
      • 如果ping域名后长时间没有任何输出及返回,说明网络无法连通,请检查:

        • 服务器的网络配置是否正常。

        • 服务器所在网络接入类型(公网或专有网络)是否选择正确。

        • 网络接入类型为专有网络时,是否选择了正确的地域。

  • 测试当前服务器是否与DAS服务器连通

    在需要部署DBGateway的服务器执行如下命令。本文中,以DAS服务器域名为master-hdm-cn-hangzhou.aliyuncs.com举例,实际使用中请以获取的部署命令为准。

    telnet master-hdm-cn-hangzhou.aliyuncs.com 80
    • 如果返回Name or service not known,说明域名无法解析,请检查您的DNS解析服务器设置是否正确,且其域名解析正常工作。

    • 如果返回TryingIP地址,例如Trying 10.0.XX.XX,则表示网络不通,请检查:

      • 服务器的网络配置是否正常。

      • 服务器所在网络接入类型(公网或专有网络)是否选择正确。

      • 网络接入类型为专有网络时,是否选择了正确的地域。

    • 如果返回如下内容:

      Connected to master-hdm-cn-hangzhou.aliyuncs.com.  Escape character is '^]'.

      表示已经与DAS服务器正常连通。如果DBGateway仍然无法启动,需要参考上文,查看 DBGateway日志进行进一步排查。

DBGateway运行异常排查

  • 验证失败或权限不足

    • 确保创建授权账号及密码时,具有以下权限。本文以授权账号为das_test举例。

      • MySQL

        CREATE USER 'das_test'@'%' IDENTIFIED BY 'password';
        GRANT SHOW DATABASES, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'das_test'@'%';
        GRANT SELECT ON *.*  TO 'das_test'@'%';
      • PostgreSQL

        CREATE USER das_test PASSWORD 'password';
        GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO das_test;
        /* 可选执行,用于采集慢日志和SQL */ 
        ALTER USER das_test WITH SUPERUSER;
      • MongoDB

        use admin;
        db.createUser({user:'das_test',pwd:'password',roles:[{role:'readAnyDatabase', db:'admin'}, {role:'clusterMonitor', db:'admin'}, {role: 'hostManager', db: 'admin'}]})

        如果出现(Unauthorized) not authorized on admin to execute command报错,可再赋予授权账号如下权限:

        db.grantRolesToUser("das_test", [{db: "local", role: "dbAdmin"},{db: "config", role: "dbAdmin"},{db: "admin", role: "dbAdminAnyDatabase"}])
      • Redis

        Redis没有账号概念,因此仅需要保证密码正确。修改Redis密码时,需要修改其配置文件中requirepass选项并重启Redis服务。请参考Redis configuration

    • 确保授权的账号及密码正确,建议在DBGateway所在服务器上以授权账号及密码远程连接数据库实例排查。

    • 重启DBGateway并观察实例授权是否成功。

    • 推荐升级到DBGateway最新版。

  • 无法连接

    无法连接是由于DBGateway无法连接数据库实例导致,请按照以下可能的原因逐一排查:

    • 检查数据库实例是否正常运行。

      数据库实例(MySQL、PostgreSQL、MongoDB和Redis等)如果未正常运行,请检查这些实例的进程是否存在。

    • 检查DBGateway所在服务器与数据库实例(MySQL、PostgreSQL、MongoDB和Redis等)间网络是否连通。请执行以下命令确认:

      telnet 数据库实例IP或域名 数据库实例服务端口号  

      例如:

      telnet 192.168.XX.XX 3306
      • 如出现以下提示,表示网络连接正常,需要参考上文,查看DBGateway日志进行进一步排查。

        Connected to 192.168.XX.XX
        Escape character is '^]'.
      • 如没有出现以上提示,则说明为网络连通性问题,通常由服务器之间网络隔离、路由设置、防火墙或数据库实例拒绝非本地连接导致的。

  • 监控异常

    • 检查DBGateway的运行状态。

    • 尝试重启DBGateway,并观察监控是否恢复。

    • 推荐升级到DBGateway最新版。

  • 长时间已授权,验证中

    一般情况下,正确授权1~2分钟后,实例接入状态会变为连接正常。如长时间(超过2分钟)显示已授权,验证中

    • 检查DBGateway的运行状态。

    • 尝试重启DBGateway并观察实例授权是否成功。

    • 推荐升级到DBGateway最新版。