全部產品
Search
文件中心

Database Autonomy Service:DBGateway常見問題

更新時間:Jul 06, 2024

本文介紹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最新版。