mongodb bi-connector 使用


mongodb bi-connector 是一個方便的mongodb 2 sql 工具,我們可以使用sql 的強大查詢能力,分析mongo的數據,以下是一些
簡單操作,以及一些部署上的細節說明,后邊會介紹spring boot 集成的說明

安裝

為了方便測試使用本地docker 運行mongo+ 使用本地mongodb bi-connector

參考以下地址安裝 https://www.mongodb.com/download-center/bi-connector

mongo 環境准備

添加了一個pgspider:mongo pg 的fdw

  • docker-compose 文件
 
version: "3"
services:
    pg-mysql:
        image: dalongrong/pgspider:mongo
        ports:
            - "5432:5432"
        environment:
            - "POSTGRES_PASSWORD=dalong"
        volumes:
            - "./certs:/opt/certs"
    mongo:
        image: mongo
        ports:
            - "27017:27017"
  • 初始化數據
docker-compose up -d
創建數據庫以及用戶
use appdemos
db.createCollection("appdemos")
db.createUser(  
  {  
    user: "dalong",  
    pwd: "dalong",  
    roles: [{role: "dbAdmin", db: "appdemos"}],
    mechanisms : ["SCRAM-SHA-1"] 
  }  
)
導入部分這個,這個可以根據實際數據導入,可以使用命令

配置說明

下載好的軟件包里邊有三個文件(可能是兩個)一個生成schema 的一個是sql 運行服務,一個是sql 到mongo
聚合查詢生成的,我們使用靜態配置方式,同時因為添加了用戶密碼,所以需要tls 證書(使用了寬松模式)

  • 配置

  • 生成證書

    實際最好調整下信息

 
openssl req -nodes -newkey rsa:2048 -keyout test.key -out test.crt -x509 -days 365 -subj "/C=US/ST=test/L=test/O=test Security/OU=IT Department/CN=test.com"
cat test.crt test.key > test.pem
  • mongosqld配置
    通過yaml 格式配置
 
net:
  bindIp: "0.0.0.0"
  port: 3307
# 寬松模式的ssl
  ssl:
    mode: allowSSL
    PEMKeyFile: './certs/test.pem'
    allowInvalidCertificates: true
    minimumTLSVersion: TLS1_0
mongodb:
  net:
    uri: "mongodb://127.0.0.1:27017"
    ssl:
      enabled: false
    auth:
      username: dalong
      password: dalong
      source: appdemos
      mechanism: SCRAM-SHA-1
security:
  enabled: true
  defaultMechanism: "SCRAM-SHA-1"
  defaultSource: "appdemos"
systemLog:
  path: ./mongosqld.log
  verbosity: 2
  logAppend: true
schema:
  path: ./schemas
  maxVarcharLength: 65535
processManagement:
  service:
    name: "mongosql"
    displayName: "MongoSQL Service"
    description: "MongoSQL accesses MongoDB data with SQL"
  • schema 生成
bin/mongodrdl --host 127.0.0.1:27017 --username dalong --password dalong --db appdemos --authenticationDatabase appdemos --out schemas/schemas.drdl
  • 啟動服務
bin/mongosqld --config mongosqld-config.yml
  • 連接

    注意部分工具可能使用了mysql jdbc 8 以及一些高版本的連接會有問題

對於連接因為使用了ssl,需要使用工具需要勾選ssl,同時對於mysql cli 需要添加--enable-cleartext-plugin ,同時需要注意如果代碼連接也需要配置

 

 


 

 


 

 

幾個問題

  • ssl 問題
    這個問題也是網上大家都反饋比較多的, 盡管net配置中可以ssl disable,但是沒有效果(這個是使用密碼關系,屬於工具的一個強制策略)
    盡管有人說只能本地運行,這是不對的,碰到問題最好還是多看看官方文檔,這樣會少點折騰
  • 代碼連接問題
    spring jdbc 配置,這個后邊會有介紹使用的,關於nodejs 的集成就很不好了,好多對於ssl 的支持一般,后邊也有介紹
 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/appdemos?useSSL=true
spring.datasource.username=dalong
spring.datasource.password=dalong
  • 關於mysql fdw 的集成問題
    這個測試沒用通過(mysql 協議支持的問題,當然修改fdw 代碼,讓只支持查詢,應能是可行的,后邊嘗試下),如果真的需要
    集成推薦使用mongo 的fdw(這個更靠譜穩定)
  • 實際生成的mongo 查詢 

       這個我們可以通過mongotranslate 工具,以及sql 的查詢計划任務看出來,以下是sql 查詢分析的 

 

 

  • linux systemd 啟動文件
    mongosqld 命令行支持包含了使用系統服務管理的命令,可以快速幫助我們生成系統級別的服務管理腳本,如下是centos 的一個
    目錄:/etc/systemd/system/mongosql.service 方便大家學習
 
[Unit]
Description=MongoSQL accesses MongoDB data with SQL
ConditionFileIsExecutable=/usr/bin/mongosqld
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/mongosqld "--config=/root/mong/mongosqld-config.yml"
Restart=always
RestartSec=120
EnvironmentFile=-/etc/sysconfig/mongosql
[Install]
WantedBy=multi-user.target

參考資料

https://docs.mongodb.com/bi-connector/master/reference/mongosqld/#bin.mongosqld
https://www.mongodb.com/download-center/bi-connector
https://docs.mongodb.com/bi-connector/master/release-notes/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM