Metabase H2 SQL Shell:用 `java -cp metabase.jar org.h2.tools.Shell` 直连应用数据库排查与迁移
Metabase H2 SQL Shell用java -cp metabase.jar org.h2.tools.Shell直连应用数据库排查与迁移【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabaseMetabase 使用嵌入式 H2 数据库作为默认应用数据库存储仪表盘、问题、用户等元数据。当需要绕过应用直接查看、修改或排查 H2 中的数据时可以使用 H2 自带的 Shell 工具通过一行java -cp metabase.jar org.h2.tools.Shell命令打开交互式 SQL 终端。本文以当前仓库中的命令文档resources/commands/footer.md 与 docs/installation-and-operation/commands.md为主体结合 H2 驱动与迁移命令源码讲解该 Shell 的启动方式、连接串写法、注意事项以及与dump-to-h2/load-from-h2命令配合的典型运维场景。一、H2 与 Metabase 应用数据库的关系Metabase 的默认应用数据库是嵌入式 H2对应文件通常形如metabase.db.mv.dbH2 2.x 的 MVStore 文件格式。在仓库源码中H2 相关实现集中位于 src/metabase/driver/h2.clj作为 JDBC 数据仓库驱动与 src/metabase/app_db/h2.cljH2 特有的错误码等适配。H2 驱动在 Metabase 中已被标记为:deprecated见 src/metabase/driver/h2.clj 的driver/superseded-by :h2 :deprecated但仍承担应用数据库角色。二、打开 H2 SQL Shell原命令文档给出的启动方式如下java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:/path/to/metabase.db拆解这条命令java -cp metabase.jar将metabase.jar加入 classpath从而复用其中打包的 H2 驱动与工具类无需单独下载 H2。org.h2.tools.ShellH2 自带的命令行 Shell 主类。-url jdbc:h2:/path/to/metabase.db指定要连接的 JDBC URL。/path/to/metabase.db是数据库文件路径不要带上.mv.db扩展名。启动后 Shell 会进入交互模式可执行任意 SQL 语句例如-- 查看应用数据库中的表 SHOW TABLES; -- 查询设置表 SELECT * FROM SETTING; -- 查询用户表 SELECT * FROM USERS;输入exit或按CtrlC退出。连接 URL 细节H2 的连接 URL 中file:前缀与.mv.db扩展名的处理规则在 src/metabase/cmd/copy/h2.clj 的add-file-prefix-if-needed函数中有明确体现如果路径未以file:开头会自动补上file:协议前缀如果路径以.mv.db结尾会去掉该扩展名。因此在实际使用中以下两种写法等价java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:/path/to/metabase.db java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:file:/path/to/metabase.db.mv.db交互式登录未指定用户名密码时H2 Shell 会提示输入。Metabase 应用数据库的默认用户为sa密码为空若你为应用数据库设置了密码按提示输入即可。也可以在命令中直接追加-user sa -password 跳过交互提示java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:/path/to/metabase.db -user sa -password 三、为什么要在命令行里操作 H21. 排查应用数据库问题Metabase 的所有元数据仪表盘、集合、问题、权限、设置等都存在应用数据库中。当 UI 出现异常、数据不同步或需要核对底层记录时SQL Shell 是最直接的排查工具-- 查看所有集合 SELECT * FROM COLLECTION; -- 查看最近创建的仪表盘 SELECT * FROM REPORT_DASHBOARD ORDER BY created_at DESC LIMIT 10;2. 迁移前后验证数据完整性仓库中的dump-to-h2与load-from-h2命令以 H2 文件作为序列化中转载体dump-to-h2 h2-filename把现有应用数据库的数据复制到新 H2 文件见 src/metabase/cmd/dump_to_h2.clj 的dump-to-h2!。默认文件名metabase_dump.h2支持-k/--keep-existing不删除已存在的目标文件与-p/--dump-plaintext不加密导出内容。load-from-h2 h2-connection-string把 H2 文件数据导入新建的 MySQL / Postgres 应用数据库见 src/metabase/cmd/load_from_h2.clj 的load-from-h2!。目标库由MB_DB_TYPE、MB_DB_HOST、MB_DB_PORT、MB_DB_USER、MB_DB_DBNAME等环境变量指定。dump 完成、load 之前正适合用 SQL Shell 打开中转 H2 文件做完整性检查java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:/path/to/metabase_dump.h2-- 确认数据行数 SELECT COUNT(*) FROM USERS; SELECT COUNT(*) FROM REPORT_DASHBOARD;3. 手动修复少量记录对于少量数据修复如清理异常设置、修正误建集合直接在 Shell 中执行 SQL 比反复启动应用更高效。修改前务必先备份应用数据库文件。四、相关 CLI 命令速览H2 SQL Shell 只是 Metabase JAR 内置运维命令的补充工具。运行java -jar metabase.jar help可查看完整命令列表与 H2 强相关的几个命令如下详见 docs/installation-and-operation/commands.md命令作用dump-to-h2 h2-filename [opts]将现有应用数据库数据导出到新 H2 文件作为迁移中转load-from-h2 h2-connection-string从 H2 文件导入到新建的 MySQL / Postgres 应用数据库reset-password email-address重置指定邮箱用户的密码migrate direction运行数据库迁移up/force/down等version打印 Metabase 与当前系统版本信息五、注意事项与安全提醒先备份再操作直接写 H2 应用数据库属于高风险操作修改前务必备份metabase.db.mv.db文件。不要在 Metabase 运行时写库应用运行期间持有 H2 文件锁写入可能冲突或损坏数据建议停止 Metabase 后再进行结构性修改。路径不要带.mv.db扩展名H2 默认基于给定路径追加扩展名写错路径可能让 Shell 新建一个空库而不是连上现有库。加密数据库需密钥若应用数据库已启用加密直接连接会失败需要通过MB_ENCRYPTION_SECRET_KEY提供密钥或改用官方迁移命令处理。H2 已标记为废弃源码中driver/superseded-by :h2返回:deprecatedH2 仅作为默认应用数据库存在不建议把业务数据仓库建立在 H2 上长期使用请考虑迁移到 MySQL / Postgres。六、小结java -cp metabase.jar org.h2.tools.Shell -url jdbc:h2:/path/to/metabase.db是 Metabase 运维工具箱中简单但实用的一行命令它能直接打开应用数据库的交互式 SQL 终端用于数据排查、迁移验证和少量修复。结合dump-to-h2/load-from-h2迁移命令源码见 src/metabase/cmd/copy/h2.clj可以在不改动 Metabase 代码的前提下完成从数据检查到实例迁移的完整闭环。操作时牢记“先备份、停服务、写对路径”三条原则即可安全地把它纳入日常运维流程。【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考