升级 Metabase

本页介绍如何升级到新的 Metabase 版本

升级 Metabase 云

如果您使用 Metabase 云 方案,我们将在每次新版本发布时自动升级您的 Metabase;您无需采取任何操作。

我们升级您的速度取决于版本类型

  • 小版本发布(例如,x.54.4 到 x.54.5):通常大约一周。
  • 主要版本发布(例如,x.53.4 到 x.54.1):时间较长,通常需要数月(只是为了确保一切顺利)。

云客户可以通过发送电子邮件至 help@metabase.com 联系支持团队,请求提前升级。请在邮件中包含您希望我们升级的 Metabase 的 URL。

升级自托管 Metabase

以下是升级到新 Metabase 版本(主要版本或次要版本)的步骤

1. 备份您的应用程序数据库

应用程序数据库记录着您的 Metabase 实例的所有内容(除了您连接的数据库中的数据)。虽然您不太可能需要回滚到当前版本,但备份可以在出现问题时让您高枕无忧。

参见 备份 Metabase 应用程序数据

2. 替换为新的 Metabase 版本

步骤因您运行的是容器镜像还是 JAR 文件而异。

升级容器镜像

  1. 停止当前容器。

  2. 拉取最新的 Metabase Docker 镜像(尽管我们建议您拉取特定标签而不是使用 latest)。

    Metabase 开源版

    docker pull metabase/metabase:latest
    

    Metabase 专业版或企业版

    docker pull metabase/metabase-enterprise:latest
    
  3. 启动新的容器镜像。根据端口和容器名称,命令可能类似于

    Metabase 开源版

    docker run -d -p 3000:3000 -e MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>" --name metabase metabase/metabase:latest
    

    Metabase 专业版或企业版

    docker run -d -p 3000:3000 -e MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>" --name metabase metabase/metabase-enterprise:latest
    

启动时,Metabase 将自动执行升级。Metabase 完成升级后,您将运行新版本。

升级 JAR

要升级,您需要停止服务,用新版本替换 JAR,然后重新启动服务。

例如,如果您在 Debian 上使用 Nginx 以服务形式运行 Metabase。

  1. 停止 Metabase 服务。假设您的服务名为 metabase.service,您将运行

    sudo systemctl stop metabase.service
    
  2. 下载最新版本的 JAR 文件

并将当前(旧版)Metabase JAR 文件替换为您下载的新版 JAR 文件。

  1. 重启服务

    sudo systemctl restart metabase.service
    

从旧版本 Metabase 升级

如果您使用的 Metabase 版本低于 Metabase 40,您需要逐个版本升级,直到达到 Metabase 40 的最新版本。从 Metabase 40 的最新版本开始,您可以直接跳到当前的 Metabase 版本。

例如,如果您运行的是 Metabase 1.38,您的升级路径将如下所示

  • 1.38.X
  • 1.39.X
  • 1.40.X
  • 最新版

其中 X 是每个版本可用的最新版本。

查看 Metabase 版本 列表。

在其他平台升级 Metabase

升级或降级期间会发生什么?

主要版本升级期间(例如,53.1 升级到 54.1),Metabase 将

  • 执行升级到新版本所需的所有迁移,例如两个版本之间应用程序数据库的任何模式更改。
  • 保留其在应用程序数据库上工作所需的所有元数据。

Metabase 将自动完成所有这些操作。

如果您在主要版本升级后需要降级,您将需要从备份中恢复,或者手动迁移到较低版本,否则 Metabase 可能会拒绝启动(请参阅下一节)。

次要版本升级期间(例如,54.1 升级到 54.2),新的 Metabase 容器或 Jar 将直接运行。只有在极少数情况下才需要执行迁移,但与主要版本升级一样,Metabase 将自动执行迁移。当然,您每次升级时都会备份您的应用程序数据库,对吗?

回滚升级或降级到旧版本

通常,定期备份(尤其是在升级前备份)是最佳策略,因此我们建议通过恢复应用程序数据库的备份来回滚升级。

但是,如果您自升级以来进行了任何更改(例如添加新的问题/仪表板等),并且希望保留这些更改,您可以使用 migrate down 命令回滚您的 Metabase 应用程序数据库,以支持您之前运行的 Metabase 版本。当 Metabase 升级到新版本时,它会运行可能更改应用程序数据库模式的迁移。 migrate down 命令会撤销这些模式更改。通常,我们建议从备份中恢复(您在升级前肯定记得生成的备份),并且仅在确实需要保留升级后所做的更改时才使用 migrate down 命令。

使用 migrate down 命令

停止您的 Metabase,并使用当前已升级的 Metabase JAR(而不是您想要回滚到的 Metabase JAR)来完成 migrate down 命令的回滚。确保您的应用程序数据库的连接详细信息已在环境变量中设置,例如

export MB_DB_TYPE=postgres
export MB_DB_DBNAME=metabaseappdb
export MB_DB_PORT=5432
export MB_DB_USER=username
export MB_DB_PASS=password
export MB_DB_HOST=localhost
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar migrate down

如果您正在运行 Docker,请使用命令 "migrate down""migrate down" 周围带引号),并包含您的应用程序数据库的连接详细信息,例如

docker run
  -e "MB_DB_TYPE=postgres" \
  -e "MB_DB_DBNAME=metabaseappdb" \
  -e "MB_DB_PORT=5432" \
  -e "MB_DB_USER=name" \
  -e "MB_DB_PASS=password" \
  -e "MB_DB_HOST=my-database-host" \
--rm metabase/metabase:<tag> "migrate down"

注意 "migrate down" 周围的引号。您也可以直接进入容器的 shell 并在其中运行迁移命令。

迁移过程完成后,使用您想要运行的版本的 JAR 或容器镜像启动 Metabase。

升级在集群中运行的 Metabase

如果您在集群中运行 Metabase

  1. 将节点数量减少到单个节点。您不能同时升级所有节点,因为升级过程是通过从单个客户端获取应用程序数据库上的迁移锁来执行迁移的。如果您在进行主要版本升级时保持多个节点处于活动状态,则应用程序将无法正常运行,因为应用程序数据库的模式更改可能会对仍在运行旧版本 Metabase 的节点造成问题。
  2. 照常执行升级(如上所述)。
  3. 将节点数量恢复到之前的数量。

阅读其他 Metabase 版本的文档。

© . All rights reserved.