简介:DBeaver 是一款在开发者与数据库管理员中广泛使用的通用数据库客户端。该版本为 23.2.4 社区版(CE),面向 Linux ARM64 架构,且未内置 JDK,适合系统已配置 Java 环境的用户,可在国产化、ARM 服务器及嵌入式环境中管理 MySQL、PostgreSQL、Oracle、DB2、MSSQL、SQLite 等多种数据库,提供图形化工作台浏览数据库结构、执行 SQL 查询与脚本。压缩包体积约 83.07MB,共 714 个文件:以 353 个 jar 程序库和 125 个 class 类文件构成核心功能,配合 25 个 properties 配置、24 个 xml 描述、24 个 html 与 22 个 css 界面资源,另有 20 个 so 原生动态库保障 Linux 平台运行,并包含 license 等规范文件。已有 133 人学习下载。借助该打包版本,可快速获得 DBeaver 完整能力,包括数据库对象管理、SQL 执行、数据导入导出、Git/SVN 版本控制集成、图表统计与 SQL 自动补全,适合作为开发、测试、运维人员的日常数据库工具。无论是快速连接调试、日常数据维护,还是自动化脚本执行,都能一站式完成。
1. 为什么 Linux 上我一直用 DBeaver 23.2.4 的 nojdk 包
在 aarch64 架构的 Linux 服务器上,我遇到过不少 GUI 数据库客户端装不上的情况:x86_64 的二进制跑不了,或者勉强装上又在启动时因为缺少 JRE 组件崩掉。dbeaver-ce-23.2.4-linux.gtk.aarch64-nojdk.tar.gz是 DBeaver Community Edition 为 ARM64 Linux 提供的无 JDK 打包,体积比带 JRE 的版本小约 120 MB,直接复用系统里已有的 JDK 17,很符合服务器上已有 Java 环境的现状。作为数据库管理工具,它统一了 MySQL、PostgreSQL、Oracle、DB2、SQLite 和达梦 DM 等常见数据源的连接、SQL 编辑、元数据浏览、导入导出。适合有一定经验、需要在 ARM64 机器上既用图形界面又写脚本做自动化巡检的开发者或 DBA。
2. DBeaver 的架构与 JDBC 驱动加载路径:从 libjnidispatch 说起
2.1 nojdk 与带 JDK 发行版的差异
DBeaver 官方发布页对 Linux 的包按平台分成linux.gtk.x86_64和linux.gtk.aarch64,后面再跟上nojdk后缀区分是否内嵌 Java 运行时。带 JDK 的包解压即用,但对于已经装有 JDK 的服务器,这纯粹是重复占盘。nojdk包不带任何 Java 运行时,它会优先读取dbeaver.ini里的-vm,找不到再退回JAVA_HOME或PATH。
对比一个表格会更清楚:
| 对比项 | nojdk aarch64 包 | 带 JDK 的 aarch64 包 |
|---|---|---|
| 解压体积 | 约 200 MB 上下 | 约 320 MB 上下 |
| Java 来源 | 系统 JDK | 内嵌 JRE |
| 适合场景 | 已有 JDK 的生产机 | 桌面机器、无 JDK 环境 |
| 升级风险 | 需要关注系统 JDK 兼容性 | 升级时 JRE 会连带替换 |
| 我的选择 | 数据机、巡检机用它 | 个人办公本才用带 JDK 的 |
23.2.4 是 2023 年下半年的稳定序列,官方在这个版本上对 aarch64 的原生支持已经比较成熟,相比早期版本少了很多 GTK 崩溃问题。如果你用的是另一个版本,先确认你的压缩包是aarch64-nojdk,而不是x86_64或aarch64不带nojdk。
2.2 JNA 与 libjnidispatch:原生层在 aarch64 上如何工作
解压后,在plugins目录里能找到com.sun.jna插件,它包含 JNA 的 native 文件,很多平台上以.so形式存放,而这份包里的libjnidispatch.a属于 JNA 的静态链接版本。JNA 是 Java 调用本机 C 函数的一层封装,DBeaver 用它做窗口集成,SWT 则负责整个 GTK 界面。对 aarch64 来说,这个 native 文件必须是指定 CPU 架构编译的,混用 x86_64 文件会直接启动失败。
验证当前包里的 native 文件是否匹配硬件:
find /opt/dbeaver/plugins -name "libjnidispatch*" file /opt/dbeaver/plugins/com.sun.jna_*/libjnidispatch.sofile命令会输出类似ARM aarch64的架构信息。如果输出是x86-64,说明这个包本身就下错了。检查完架构后,再看系统的 GUI 依赖库是否齐全,这一步放到第 3 章启动验证里一起做。
2.3 JDBC 驱动不是内置的:加载规则与缓存位置
DBeaver 与 Navicat 的一个关键差别是,DBeaver 默认不内置具体数据库驱动,而是按需从 Maven 仓库拉取。每个驱动在内部对应一个 Maven artifact,下载后放在数据目录里的drivers/maven下,路径结构是groupId/artifactId/version。
find ~/.local/share/DBeaverData/drivers -name "*.jar" 2>/dev/null | head -20如果这个命令没输出,说明还没有任何驱动被下载过。很多 aarch64 服务器没有外网,就需要你在有网机器上拿到 jar,手工放到上述目录里,或者把dbeaver.ini里的 Maven 仓库地址指向内网 Nexus。这两条路的具体步骤,第 4 章会给完整可执行版本。
注意:
~/.local/share/DBeaverData只在单用户模式下成立。如果你用 root 跑 DBeaver,又把 HOME 设成/root,连接配置和驱动缓存都在/root/.local/share下,换用户时会全部丢失。
3. 在 aarch64 Linux 上安装与命令行启动验证
3.1 解压与目录规划
拿到dbeaver-ce-23.2.4-linux.gtk.aarch64-nojdk.tar.gz后,我习惯解压到/opt/dbeaver。这个压缩包顶层是一个带版本号的目录,用--strip-components=1可以把这层省掉,后续写 systemd unit 和 cron 时路径更短。
mkdir -p /opt/dbeaver tar -xzf dbeaver-ce-23.2.4-linux.gtk.aarch64-nojdk.tar.gz -C /opt/dbeaver --strip-components=1 chmod +x /opt/dbeaver/dbeaver /opt/dbeaver/dbeaver-clitar -xzf表示解压 gzip 压缩的 tar 包;-C指定目标目录;--strip-components=1是去掉第一层目录的关键参数。解压后你会看到configuration、plugins、dbeaver.ini、dbeaver以及dbeaver-cli。如果dbeaver-cli缺少可执行权限,后面的命令行验证就没办法跑。
3.2 用 dbeaver.ini 指定你的 JDK
nojdk 包必须依赖系统 JDK。DBeaver 23.2.x 对 JDK 版本的要求比较宽松,但我一般固定到 OpenJDK 17,避免 Java 8 或 21 在不同驱动上出现类加载差异。在服务器上同时装了多个 JDK 时,最可靠的方式是写死在dbeaver.ini:
cat >> /opt/dbeaver/dbeaver.ini <<'EOF' -vm /usr/lib/jvm/java-17-openjdk-aarch64/bin/java --launcher.appendVmargs -vmargs -Ddbeaver.data.location=/opt/dbeaver-data EOF-vm和路径必须分成两行,路径必须是java可执行文件,不能只写到/usr/lib/jvm/java-17-openjdk-aarch64。-Ddbeaver.data.location=/opt/dbeaver-data用于切换数据目录,让它离开用户的 HOME,多用户共用程序时更干净。如果不设置这个,DBeaver 会把 workspace 放在$HOME/.local/share/DBeaverData。
写完后可以先用head确认目标环境 JDK 存在:
ls -l /usr/lib/jvm/java-17-openjdk-aarch64/bin/java3.3 首次启动与 dbeaver-cli 冒烟
在纯 SSH 环境里我不会直接打开图形界面,而是先用dbeaver-cli跑一条查询。这样能同时验证 JDK、驱动 jar 和网络连通性。23.2.4 的 CLI 通常支持-family、-url、-query这套参数:
export PATH=/opt/dbeaver:$PATH dbeaver-cli -family postgresql -user dbuser -pass 'dbpass' \ -url 'jdbc:postgresql://10.0.0.13:5432/appdb' \ -query 'select version();'-family是驱动注册名,DBeaver 预置的常见值有mysql、postgresql、oracle。-query的作用是执行单条 SQL,并把结果打印到标准输出,部分版本里这个参数会被写成-sql,遇到参数报错时先跑一次dbeaver-cli -help看实际输出。
CLI 常用参数整理如下:
| 参数 | 作用 | 举例 |
|---|---|---|
-family | 指定数据库驱动族 | postgresql、mysql、oracle |
-user | 登录用户名 | -user dbuser |
-pass | 登录密码 | -pass 'p@ss' |
-url | JDBC 连接 URL | jdbc:mysql://127.0.0.1:3306/test |
-query | 执行的 SQL | -query 'select 1' |
-con | 指定已有连接 | -con "本地PG" |
-con读的是图形界面里保存的连接配置,刚安装完没有,所以第一条命令建议直接用-url。
3.4 用 ldd 检查原生库
ARM64 上常见的启动失败不是 Java 层报错,而是某个 .so 依赖缺失。用ldd查看libjnidispatch.so是最直接的排错方式:
find /opt/dbeaver/plugins -name "libjnidispatch.so" -exec ldd {} \;看到not found再去装对应包。Ubuntu/Debian 上通常是:
sudo apt install libxtst6 libxi6 libxrender1 libgtk-3-0RHEL 系是libXtst、libXrender、gtk3。这步完成后dbeaver-cli基本能正常启动,后面再开图形界面就省心了。
4. 图形界面与数据库管理实战:元数据编辑、导入导出、驱动离线安装
4.1 从 CLI 切换到 GUI 需要确认的显示环境
命令行验证通过后,图形界面依赖的 Java 和驱动层已经没有问题。接下来需要确认DISPLAY可用。常见的办法是通过 SSH X11 转发:
ssh -X dba@arm-server export DISPLAY=:10.0 /opt/dbeaver/dbeaver &ssh -X会把远程 GUI 转发到本地显示服务器。如果没有本地显示器,也可以直接装一个 Xvfb 虚拟显示,只是为了截图或者跑 GUI 测试。如果启动后进程立刻消失,先看~/.dbeaver/.metadata/.log,这个日志是 Eclipse 平台写的,里面的!ENTRY会告诉你缺少哪个库或哪个插件。
4.2 离线环境安装 JDBC 驱动:从 Maven 仓库到本地目录
内网服务器使用 DBeaver 时,最容易卡住的是“连接时转圈,最后报 driver not found”。DBeaver 默认从 Maven Central 下载驱动,外网不可达时就必须手工介入。以 MySQL 8 为例,先把驱动 jar 放到缓存目录:
mkdir -p ~/.local/share/DBeaverData/drivers/maven/mysql/mysql-connector-java/8.0.33 cp mysql-connector-java-8.0.33.jar \ ~/.local/share/DBeaverData/drivers/maven/mysql/mysql-connector-java/8.0.33/路径中的mysql/mysql-connector-java/8.0.33对应 Maven 坐标 groupId 为mysql,artifactId 为mysql-connector-java,version 为8.0.33。如果你的实际 jar 版本号不同,目录和文件名都要保持一致。放完后打开图形界面的“数据库驱动管理器”,在 MySQL 驱动上点一次“重置”,让 DBeaver 重新扫描文件,否则它可能仍然保留之前的失败状态。
如果公司有 Nexus,更省事的方法是改仓库地址。在dbeaver.ini里追加:
-Ddbeaver.drivers.download.url=https://nexus.internal/repository/maven-public/这个 URL 必须是合法的 Maven 仓库根路径,末尾不能少/。设置完后,任何缺失的 JDBC 驱动都会走内网下载。注意这个参数对 PostgreSQL、达梦 DM、openGauss 同样生效。
4.3 用图形界面编辑表结构并生成安全 DDL
元数据编辑是本工具的核心价值之一。左侧导航栏展开数据库,在表节点上右键,选择“生成 ALTER 脚本”,DBeaver 会先给出完整的 SQL 语句而不是直接执行。以加索引为例:
CREATE INDEX IF NOT EXISTS idx_users_created_at ON public.users USING btree (created_at DESC);生成后你可以在 SQL 编辑器里继续调整,比如改成CONCURRENTLY以避免影响线上写入。相比一些直接修改结构的工具,这种“先生成 DDL,再自己确认”的方式,能让习惯用命令行看EXPLAIN的工程师保留对数据库的完全控制。DBeaver 的表编辑器还支持列注释、默认值、分区键、约束设置,修改结果都会反映到最终 DDL 里。
4.4 数据导入导出与 BLOB 查看
导出数据我常用的是结果集右键菜单:在查询结果网格上点右键,选择“导出数据”,然后按向导选择 CSV、Excel、JSON 或 Insert 语句格式。导出时可以带 WHERE 条件,也可以选择部分列,这比命令行客户端要灵活。对 BLOB/CLOB 字段,双击结果集单元格会弹出二进制编辑器,可以查看图片、PDF 或把它另存到本地。
导入数据则通过“数据库导航栏”右键目标表,选择“导入数据”,支持从 CSV、Excel 或另一个 DBeaver 连接导入。遇到大文件导入慢时,我一般把格式切成 CSV,并关掉“分批提交”的默认限制,可以直接从几百行到几十万行的跨度。
提示:在 aarch64 机器上如果导出 Excel 卡死,通常是缺少 LibreOffice 转换模块或者字体,改导出为 CSV 或 JSON 就能避开这个问题。
5. 用 dbeaver.ini 锁定 JDK 并同步连接配置到新机器
-vm参数的位置决定了 Eclipse 启动器用哪个 Java。它必须出现在--launcher.appendVmargs之前,否则会被当成普通 VM 参数忽略。检查是否被正确加载,可以这样:
jinfo $(pgrep -f "/opt/dbeaver/dbeaver" | head -1) | grep "java.home"如果输出的java.home不是-vm指定的路径,说明 ini 里顺序不对。这是 nojdk 包最容易踩的坑,比驱动缺失更隐蔽。
连接配置迁移是个很实用的技巧。DBeaver 工作区里的.dbeaver目录保存了所有连接定义,找到它并不需要背路径:
find ~/.local/share/DBeaverData -name "credentials-config.json"拿到这个文件后,把它复制到另一台 aarch64 机器相同位置,新的 DBeaver 就能直接看到原有连接树。复制后要设置权限为 600,否则 DBeaver 会拒绝读取以保护密码:
chmod 600 ~/.local/share/DBeaverData/workspace*/General/.dbeaver/credentials-config.json最后把它和 CLI 巡检结合起来,可以在 cron 里加一个最简单的数据库存活检查:
dbeaver-cli -family postgresql -user app -pass "$PGPASS" -url "$PGURL" \ -query "select 1" >/dev/null && echo DB_OK || echo DB_DOWN配合credentials-config.json一起同步,新机器只要装了同样版本和 JDK,连接配置、驱动缓存、巡检脚本三件套一次到位。
本文还有配套的精品资源,点击获取