目录
五、向Cloudbeaver 添加 OpenGauss 驱动
Cloudbeaver是运行于服务器端的数据库管理软件,它采用BS模式,客户端通过浏览器打开操作界面,支持多种数据库。Cloudbeaver后台底层依赖于Dbeaver,通过JDBC连接数据库,Dbeaver也有独立运行版本,是CS模式数据库管理软件。Cloudbeaver的BS模式特别适用于云计算环境,可以避免暴露数据库服务器的IP地址和端口号。Dbeaver和Cloudbeaver都是用java编写,运行时需要JDK11或更高版本,参考官网要求(Documentation – CloudBeaver)。
一、下载源码
需要两部分源码:cloudbeaver和dbeaver,下载cloudbeaver时会自动下载dbeaver的源码。国内gitee的镜像上的代码是可用的,当然如果能用github更好。git clone 时要注意,根目录命名为小写的cloudbeaver,这个和编译脚本有关:
git clone https://gitee.com/mirrors/CloudBeaver.git cloudbeaver
到deploy目录下执行build.sh,但它会到github下载dbeaver的源码,修改下载地址:
git clone https://gitee.com/mirrors/dbeaver.git
许多人觉得gitee上的代码有问题,但其实是没有指定好分支,选对分支非常非常关键,否则会出现奇怪的编译错误,我之前就在这上面浪费了很多时间。注意,不要用tag,而是要用分支:
cloudbeaver 选分支 origin/release_22_3_1
cd cloudbeaver
git branch -r
git co -b release_22_3_1 --track origin/release_22_3_1
同样 dbeaver 也要选分支 origin/release_22_3_1
cd dbeaver
git br branch -r
git co -b release_22_3_1 --track origin/release_22_3_1
二、安装编译构建工具
1、需要 g++ >= 7.3.0,因为有一步有-std=c++14,我用的是7.3.0。
2、我的环境 OPENJDK17,maven-3.8.6,cloudbeaver/beaver更新了22.3.1以后JDK11也不行了,JDK下载地址:
Archived OpenJDK GA Releases (java.net)
3、参考官网Documentation – CloudBeaver,安装npm,但稍有不同,我是sudo yum install npm安装完npm后,用npm安装yarn、lerna和nodejs,我的操作系统是CentOS-7.9,用的是国内的网,没有翻墙。
sudo npm install -g yarn nodejs lerna
虽然编译的时候要依赖这么多,但运行时只需要JDK17。
三、执行编译构建
到源码cloudbeaver/deploy目录下执行./build.sh,这个过程会下载很多依赖包,建议maven使用国内源,我用的是南京大学的(下面加到maven的conf/settings.xml):
<mirror>
<id>nju_mirror</id>
<mirrorOf>central</mirrorOf>
<url>https://repo.nju.edu.cn/repository/maven-public/</url>
</mirror>
构建完成后,结果在deploy/cloudbeaver下,把这个目录打包,移动到其它Linux服务器上,配置好JDK(环境变量PATH和JAVA_HOME),执行里面的run-server.sh,后台就运行起来了。
我试过在翻墙的情况下构建,没有问题,也试过使用国内的代码库和软件源,全程没有翻墙的情况,也可以构建成功,有时不成功,我就多执行了几次build.sh,结果可以了,请相信国内的地址。
四、在Linux下安装Cloudbeaver
1、安装JDK
由于我编译时用的是OpenJDK17,运行时,把OpenJDK17的压缩包部署在运行环境即可,只需配置两个环境变量,例如:
export PATH=/mnt/disk01/jdk-17.0.2/bin:$PATH
export JAVA_HOME=/mnt/disk01/jdk-17.0.2
这两行还可以加到用户的~/.bash_profile文件中。
2、安装和启动Cloudbeaver
解压cloudbeaver.tar.gz,得到目录cloudbeaver,可以放在任何位置。
cd cloudbeaver
执行./run_server.sh
如果需要配置参数,可修改cloudbeaver/conf/cloudbeaver.conf,Web服务器的默认端口号是8978。
Ctl+c或者kill掉进程(不需要-9)可关闭Cloudbeaver,也可以使脚本在后台执行,例如:
nohup ./run-server.sh > log 2>&1 &
3、登录Cloudbeaver
成功启动后,在浏览器输入(运行run-server.sh的)服务器IP地址和端口号:
浏览器建议使用Microsoft Edge,我在使用Chrome时,查询表时遇到了下面的问题,换了Microsoft Edge就没有问题:
如上图,第一次打开页面,会要求创建账号密码,这个账号密码不是数据库的账号密码,而是登录Cloudbeaver的账号密码,之后要用这个账号密码登录才能继续操作,点“NEXT”(删除安装目录cloudbeaver/workspace下的.data、.metadata和GlobalConfiguration可以重置Cloudbeaver)
登录之后,就是配置数据库连接页面,默认内置了多种数据库驱动。建议先点右上角的“设置”图标(齿轮),切换语言。
五、向Cloudbeaver 添加 OpenGauss 驱动
下载OpenGauss JDBC :软件包 | openGauss您可以从此页获取openGauss版本下载以及安装指导https://opengauss.org/zh/download.html%C2%A0解压后得到 opengauss-jdbc-3.0.0.jar 和 postgresql.jar 两个jar包,将 postgresql.jar 放到编译后的 deploy/cloudbeaver/drivers/postgresql 目录下,并且删除原有的 postgresql-42.3.3.jar,这样在界面选择PostgreSQL时,加载的是 postgresql.jar ,而这个 postgresql.jar,是“披着PostgreSQL JDBC外衣的OpenGauss JDBC”。然后以PostgreSQL一样的方式设置IP、端口、用户名密码,就可以借用PostgreSQL的逻辑和UI操作OpenGauss了。
上面添加OpenGauss JDBC驱动的做法有点不“正规”,简单地将PostgreSQL的JDBC Driver替换为OpenGauss的JDBC Driver,有两个问题:1)有些操作PostgreSQL的逻辑对OpenGauss不适用。2)按上面的方法,在创建连接菜单中,有了OpenGauss就没有PostgreSQL,如果需要保留PostgreSQL,让PostgreSQL选项和OpenGauss选项同时存在,怎么办呢?
下面就用一种“正规”方法添加OpenGauss驱动的。
参考:
Adding new database drivers · dbeaver/cloudbeaver Wiki · GitHub
Cloudbeaver底层依赖Dbeaver,用过Dbeaver的朋友都知道,如果想要Dbeaver支持一种新的数据库(驱动),可以编写一个插件,这插件在这种数据库的JDBC Driver外封装了一层,针对这种数据库增加特殊的操作界面,但如果新的数据库只要求支持通用的JDBC操作,则可以使用已有的org.jkiss.dbeaver.ext.generic插件,不需要专门编写插件代码。这里增加OpenGauss驱动就是用这种方法。
下面是修改步骤:
1、首先进入dbeaver源码目录,修改plugins/org.jkiss.dbeaver.ext.generic/plugin.xml,增加OpenGauss JDBC Driver的描述,如下:
[postgres@SFpnBq1027263 dbeaver]$ git diff plugins/org.jkiss.dbeaver.ext.generic/plugin.xml
diff --git a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml
index 14f4c2d..32742a5 100644
--- a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml
+++ b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml
@@ -1255,6 +1255,23 @@
<property name="rewriteBatchedStatements" value="true"/>
</driver>
+
+ <driver
+ id="opengauss"
+ label="OpenGauss"
+ icon="icons/opengauss_icon.png"
+ iconBig="icons/opengauss_icon_big.png"
+ class="org.opengauss.Driver"
+ sampleURL="jdbc:opengauss://{host}[:{port}]/[{database}]"
+ defaultPort="5432"
+ webURL="https://opengauss.org"
+ description="OpenGauss JDBC driver.">
+
+ <file type="jar" path="drivers/opengauss" bundle="drivers.opengauss"/>
+
+ </driver>
+
+
<driver
id="postgresql_generic"
label="PostgreSQL (Old)"
id="opengauss" 是OpenGauss驱动的ID,后面cloudbeaver的配置中,要用这个字符串识别。
label="OpenGauss" 可以随便写,只用于显示。
icon 和 iconBig 是自定义驱动的图标文件,路径是相对于plugins/org.jkiss.dbeaver.ext.generic/,例如 icon="icons/opengauss_icon.png" 表示图标文件在:plugins/org.jkiss.dbeaver.ext.generic/icons/opengauss_icon.png
(可以自己做一个图标放在这个位置)
class="org.opengauss.Driver" 是java源文件导入(import)jdbc驱动时的类名,OpenGauss JDBC驱动的jar文件(opengauss-jdbc-3.0.0.jar)里提供的类就是org.opengauss.Driver。
sampleURL="jdbc:opengauss://{host}[:{port}]/[{database}]" 是OpenGauss的JDBC连接字符串。
defaultPort="5432" 默认连接OpenGauss的端口号,可以随便写,因为创建连接时还可以在页面修改。
webURL="https://opengauss.org" 可以随便写。
description="OpenGauss JDBC driver." 可以随便写,只用来显示。
<file type="jar" path="drivers/opengauss" bundle="drivers.opengauss"/> 表示 OpenGauss JDBC Driver的jar包,在cloudbeaver编译结果(deploy/cloudbeaver)目录下的drivers/opengauss/中。
2、进入cloudbeaver源码目录,修改server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml,增加下面内容:
[postgres@SFpnBq1027263 cloudbeaver]$ git diff server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml
diff --git a/server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml b/server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml
index 284e055..7f27fcd 100644
--- a/server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml
+++ b/server/bundles/io.cloudbeaver.resources.drivers.base/plugin.xml
@@ -16,6 +16,7 @@
<resource name="drivers/sqlite/xerial"/>
<resource name="drivers/mssql/new"/>
<resource name="drivers/trino"/>
+ <resource name="drivers/opengauss"/>
</extension>
<!-- Bundles -->
@@ -34,6 +35,7 @@
<bundle id="drivers.sqlite.xerial" label="SQLite drivers"/>
<bundle id="drivers.mssql.new" label="SQL Server drivers"/>
<bundle id="drivers.trino" label="Trino drivers"/>
+ <bundle id="drivers.opengauss" label="OpenGauss drivers"/>
</extension>
<!-- Enabled drivers -->
@@ -52,6 +54,7 @@
<driver id="sqlite:sqlite_jdbc"/>
<driver id="sqlserver:microsoft"/>
<driver id="generic:trino_jdbc"/>
+ <driver id="generic:opengauss"/>
</extension>
修改server/drivers/pom.xml,增加下面内容:
[postgres@SFpnBq1027263 cloudbeaver]$ git diff server/drivers/pom.xml
diff --git a/server/drivers/pom.xml b/server/drivers/pom.xml
index 9562a0d..e3092af 100644
--- a/server/drivers/pom.xml
+++ b/server/drivers/pom.xml
@@ -25,6 +25,7 @@
<module>sqlite</module>
<module>sqlserver</module>
<module>trino</module>
+ <module>opengauss</module>
</modules>
<build>
创建目录 server/drivers/opengauss,再在其中创建pom.xml,内容如下图,这样构建cloudbeaver时,maven会到中央仓库下载opengauss-jdbc-3.0.0.jar,它就是OpenGauss的JDBC驱动。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>drivers.opengauss</artifactId>
<version>1.0.0</version>
<parent>
<groupId>io.cloudbeaver</groupId>
<artifactId>drivers</artifactId>
<version>1.0.0</version>
<relativePath>../</relativePath>
</parent>
<properties>
<deps.output.dir>opengauss</deps.output.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
</project>
更详细的修改见代码库:
https://gitee.com/hwrd/dbeaver
https://gitee.com/hwrd/cloudbeaver
然后重新编译cloudbeaver:
cd deploy
./build.sh
编译结果的cloudbeaver/drivers/目录下会多出一个opengauss目录,里面有opengauss-jdbc-3.0.0.jar。(如果想升级驱动,可以到网上下载高版本的opengauss jdbc替换掉这个文件)
然后像前面一样,安装、启动cloudbeaver,在创建数据库连接的界面,可以看到新增加的OpenGauss选项:
六、连接操作PostgreSQL
登录Cloudbeaver后,在管理界面左侧,选“连接管理”->“添加”,选PostgreSQL:
然后设置PostgreSQL数据库所在机器的IP、端口、所要连接的数据库名、数据库用户和密码,点“测试连接”:
如果配置没问题,会弹出下面的消息,然后点“创建”:
在创建后的界面,选右上角“设置”图标的“返回应用”,才能看到刚刚建立的PostgreSQL连接。
此时,点右上角“设置”的“管理”,可以回到刚才创建数据库连接的界面(称为管理界面)。在管理界面的设置选“返回应用”,则回到操作数据库的界面,可以理解Cloudbeaver有两个主要界面:1)“管理”界面用来设置Cloudbeaver总的参数,和创建多个到不同数据库的连接。2)“应用”界面是具体操作数据库的界面,对数据库的浏览、SQL操作,都在这个界面。
配置好到PostgreSQL的连接后,每次登录数据库都要求输入用户名密码,除非选择“保存凭据”。
下图是登录数据库后的界面,可以查看数据库对象,点“SQL”打开SQL窗口,像psql一样通过SQL操作数据库,还可以导出导入脚本和表。
七、连接操作OpenGauss
在“管理”界面的“添加”中选OpenGauss
类似于前面配置PostgreSQL连接,输入数据库主机IP、端口、数据库名、数据库用户名和密码,点“测试连接”。
测试成功后点“创建” 然后 “返回应用”
数据库操作界面与PostgreSQL类似,点“SQL”,打开SQL窗口,可以操作数据库,导入导出脚本和表。由于OpenGauss界面使用通用JDBC的插件,界面不如PostgreSQL丰富,不过通过SQL窗口可以得到同样结果。
八、连接操作MySQL
在“管理”界面的“添加”中选MySQL,然后填写MySQL数据库服务器的IP、端口、用户名和密码。
点“测试连接”,成功后点“创建”
然后点“返回应用”
数据库操作界面与前面类似,点“SQL”,打开SQL窗口,可以操作数据库,导入导出脚本和表。
Cloudbeaver可以同时建立到多个不同或相同类型数据库的连接,保存这些连接,并且同时操作这些数据库。