# multi-db-query **Repository Path**: lgq7/multi-db-query ## Basic Information - **Project Name**: multi-db-query - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-17 - **Last Updated**: 2025-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Multi-DB-Query 多数据库跨库查询系统,支持多种数据库类型的单库查询和跨库联邦查询。 ## 项目介绍 Multi-DB-Query 是一个现代化的数据库查询管理平台,旨在解决多数据源环境下的数据查询和分析需求。系统支持多种数据库类型,提供统一的查询界面,并具备跨库联邦查询能力,帮助用户在不同数据库之间执行复杂查询,实现数据整合与分析。 ### 核心功能 - **多数据库支持**:支持 MySQL、Oracle、DM(达梦)、PostgreSQL、SQLServer、Kingbase、GBase、神通、DB2、SQLite 等多种数据库 - **数据源管理**:集中管理各类数据库连接,支持测试连接功能 - **单库查询**:针对单个数据库的 SQL 查询执行与结果展示 - **跨库联邦查询**:基于 Apache Calcite 实现的跨数据库联邦查询 - **表结构浏览**:可视化浏览数据库表结构和字段信息 - **查询执行计划**:分析和优化 SQL 查询效率 - **现代化界面**:基于 Vue 3 和 Element Plus 的响应式用户界面 - **分页显示**:支持对查询结果和数据源列表进行分页显示 ## 技术架构 ### 前端技术栈 - Vue 3 + Vue Router + Pinia - Element Plus UI 组件库 - CodeMirror 6 (SQL 编辑器) - Axios (HTTP 客户端) - Vite (构建工具) ### 后端技术栈 - Spring Boot 3.1.0 - JDK 17 - MyBatis-Plus 3.5.3.1 - Apache Calcite 1.37.0 (联邦查询引擎) - Hikari 连接池 ## 系统截图 ![数据源管理页面](docs/images/datasource-management.png) ![单库查询页面](docs/images/single-query.png) ![跨库联邦查询页面](docs/images/federated-query.png) ## 开发环境搭建 ### 环境要求 - JDK 17+ - Maven 3.6+ - Node.js 18+ - MySQL 5.7+ 或其他支持的数据库(用于系统自身存储) ### 后端开发环境 1. 克隆项目到本地: ```bash git clone https://github.com/yourusername/multi-db-query.git cd multi-db-query ``` 2. 修改数据库配置: 编辑 `src/main/resources/application.yml` 文件,配置数据库连接信息(已支持环境变量配置): ```yaml spring: datasource: mysql: driver-class-name: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:multi_db_query}?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=true username: ${DB_USERNAME:root} password: ${DB_PASSWORD:root} ``` 3. 启动后端服务(开发模式): ```bash # 可选:设置环境变量 export DB_HOST=localhost export DB_PORT=3306 export DB_NAME=multi_db_query export DB_USERNAME=root export DB_PASSWORD=yourpassword # 启动 mvn spring-boot:run ``` ### 前端开发环境 1. 进入前端目录并安装依赖: ```bash cd frontend npm install ``` 2. 启动开发服务器: ```bash npm run dev ``` 3. 打开浏览器访问:http://localhost:3000 ## 部署指南 ### 方式一:Docker Compose 部署(推荐) 这是最简单的部署方式,使用 Docker Compose 一键部署完整环境。 1. 确保已安装 Docker 和 Docker Compose: ```bash docker --version docker-compose --version ``` 2. 准备部署文件: ```bash # 创建部署目录结构 mkdir -p deploy/{backend,frontend/dist,mysql/init,nginx} cd deploy # 复制配置文件 cp ../docker-compose.yml . cp ../nginx/nginx.conf ./nginx/ cp ../nginx/default.conf ./nginx/ cp ../mysql/init/init.sql ./mysql/init/ ``` 3. 构建前端和后端: ```bash # 构建前端 cd ../frontend npm install npm run build cp -r dist/* ../deploy/frontend/dist/ # 构建后端 cd .. mvn clean install cp packages/multi-db-query-*.tar.gz deploy/backend/multi-db-query.tar.gz ``` 4. 内网load docker 镜像(暂时只有x86镜像) ``` docker load -i jdk-nginx-mysql.tar ``` 5. 启动服务: ```bash cd deploy docker-compose up -d ``` 5. 访问应用: - 前端:http://localhost:8021 - 后端 API:http://localhost:8093/api - MySQL:localhost:3316 (映射端口) ### 方式二:传统部署 #### 后端部署 1. 编译打包项目: ```bash mvn clean package ``` 2. 解压缩 tar.gz 包: ```bash mkdir -p deploy/app tar -xzf target/multi-db-query-*.tar.gz -C deploy/app ``` 3. 配置并启动: ```bash cd deploy/app # 编辑 conf/application.yml 配置数据库连接 # 启动应用 bin/start.sh start ``` #### 前端部署 1. 构建前端: ```bash cd frontend npm install npm run build ``` 2. 配置 Nginx: ```nginx server { listen 80; server_name localhost; location / { root /path/to/frontend/dist; index index.html; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://localhost:8093/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ## 环境变量配置 本项目支持通过环境变量配置数据库连接和其他参数: | 环境变量 | 说明 | 默认值 | |--------------|-----------------|----------------| | DB_HOST | 数据库主机地址 | mysql | | DB_PORT | 数据库端口 | 3306 | | DB_NAME | 数据库名称 | multi_db_query | | DB_USERNAME | 数据库用户名 | root | | DB_PASSWORD | 数据库密码 | root | | SERVER_PORT | 后端服务端口 | 8093 | | LOG_LEVEL | 日志级别 | INFO | ## 使用指南 ### 数据源管理 1. 进入「数据源管理」页面 2. 点击「添加数据源」,填写数据库连接信息 3. 点击「测试连接」验证连接是否正常 4. 保存数据源配置 5. 使用底部分页控件浏览数据源列表,可选择每页显示20/50/100条 ### 单库查询 1. 进入「单库查询」页面 2. 在左侧数据库树中选择需要查询的数据库 3. 在编辑器中编写 SQL 语句 4. 点击「执行查询」按钮 5. 查看下方的查询结果,支持分页显示 ### 跨库联邦查询 1. 进入「跨库查询」页面 2. 在左侧选择需要联合查询的数据源 3. 浏览各数据源的表结构 4. 在 SQL 编辑器中编写跨库查询语句,使用数据源名称作为前缀,例如: ```sql SELECT a.id, a.name, b.description FROM mysql_source.users a JOIN oracle_source.user_details b ON a.id = b.user_id ``` 5. 点击「执行查询」按钮 6. 查看联邦查询结果,支持分页显示 ## 数据库类型支持 系统目前支持以下数据库类型: | 数据库类型 | 驱动类名 | 默认端口 | |--------------|-----------------------------------|--------| | MySQL | com.mysql.cj.jdbc.Driver | 3306 | | Oracle | oracle.jdbc.OracleDriver | 1521 | | DM (达梦) | dm.jdbc.driver.DmDriver | 5236 | | PostgreSQL | org.postgresql.Driver | 5432 | | SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver | 1433 | | Kingbase | com.kingbase8.Driver | 54321 | | GBase | com.gbase.jdbc.Driver | 5258 | | 神通 (ShentongDB) | com.oscar.Driver | 2003 | | DB2 | com.ibm.db2.jcc.DB2Driver | 50000 | | SQLite | org.sqlite.JDBC | N/A | ## 常见问题 ### Docker部署问题 1. **容器无法启动**: 检查端口占用情况,可修改 docker-compose.yml 中的端口映射 2. **数据库连接错误**: 确保在 docker-compose 环境中使用正确的服务名称作为主机名 3. **配置文件未生效**: 检查挂载路径是否正确,可查看容器日志排查问题 ### 连接问题 1. **Oracle连接错误**:使用服务名连接时,请尝试直接填写服务名或使用前缀 "/";使用SID时请使用前缀 ":" 2. **MySQL连接错误**:确保用户名有足够权限,检查端口号是否正确,添加 allowPublicKeyRetrieval=true 参数 3. **连接异常**:检查防火墙设置,确保目标数据库服务器允许远程连接 ### 启动脚本问题 1. **日志文件不存在**: 确保 logback.xml 配置文件存在于 conf 目录 2. **权限问题**: 执行 `chmod +x bin/start.sh` 添加执行权限 3. **配置未加载**: 使用 `-Dspring.config.location` 参数明确指定配置文件位置 ## 联系方式 如有问题或建议,请通过以下方式联系我们: - 项目问题跟踪:[GitHub Issues](https://github.com/yourusername/multi-db-query/issues) - 邮箱:example@example.com