升级 Metabase

升级到新 Metabase 版本的说明。

备份您的应用程序数据库

应用程序数据库跟踪您的所有人员、仪表板、问题、集合、权限:Metabase 中的所有应用程序数据(即,除了您已连接到 Metabase 的数据之外的所有内容)。虽然您不太可能需要回滚到当前版本,但备份将对您的安心大有裨益。

请参阅 备份 Metabase 应用程序数据

换入新的 Metabase 版本

步骤因您运行的是 JAR 还是 Docker 镜像而异。

升级本地运行的 JAR

如果您直接运行 JVM Jar 文件

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

  2. 下载最新版本的 JAR 文件

  3. 使用终端访问您现有的 Metabase 进程并将其终止(通常为 CTRL-C)。

  4. 将您 Metabase 目录中现有的 JAR 文件 (metabase.jar) 替换为较新版本。

  5. 重启服务器

    java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
    

启动时,Metabase 将执行完成升级所需的任何任务。Metabase 完成这些任务后,您将运行新版本。

升级作为服务在生产环境中运行的 JAR

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

例如,如果您在 Debian 上将 Metabase 作为使用 Nginx 的服务运行。

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

  2. 下载最新版本的 JAR 文件

  3. 停止 Metabase 服务。假设您将您的服务称为 metabase.service),您将运行

    sudo systemctl stop metabase.service
    
  4. 在您服务器上的 Metabase 目录中,将当前(较旧)的 Metabase JAR 文件替换为您下载的较新 JAR。

  5. 重启服务

    sudo systemctl restart metabase.service
    

升级 Docker 镜像

如果您在 Docker 容器中运行 Metabase

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

    警告:如果您没有使用生产就绪的数据库,您的应用程序数据(问题、仪表板等)将存储在容器内部的 H2 数据库中。升级需要将您现有的容器换成带有升级版 Metabase JAR 的新镜像,这将清除您的应用程序数据。我们建议您在升级前切换到生产就绪的数据库。

  2. 停止当前 Docker 容器。

  3. 拉取最新的 Metabase Docker 镜像。

    Metabase 开源版

    docker pull metabase/metabase:latest
    

    Metabase Pro 版或 Enterprise 版

    docker pull metabase/metabase-enterprise:latest
    
  4. 启动新的 Docker 容器。根据端口和您想要命名的容器,命令将如下所示

    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 Pro 版或 Enterprise 版

    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 完成升级后,您将运行新版本。

从旧版本的 Metabase 升级

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

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

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

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

查看 Metabase 版本列表

升级 Metabase 云

如果您使用的是 Metabase 云计划,我们将在每个新版本发布时自动升级您的 Metabase;您无需执行任何操作。我们升级您的速度取决于发布类型

  • 小版本发布(例如,x.47.4 到 x.47.5):通常大约一周。
  • 主要版本发布(例如,x.47.4 到 x.48.0):时间更长,通常为数周(只是为了确保一切顺利进行)。

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

在其他平台上升级 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 "migrate down"

如果您使用正确的环境变量运行 Docker Compose,则命令将是

docker compose run metabase "migrate down"

请注意 Docker 和 Docker compose 命令中 "migrate down" 周围的引号。

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

阅读其他版本 Metabase 的文档