Umami v3 正式发布:告别 MySQL,全面拥抱 PostgreSQL —— 升级与迁移指南
前言
前几天打开 Umami 的时候,发现页面布局变化很大。到官网一看,原来是 v3 版本发布了。
我的 Umami 是通过 Docker 部署的,并且安装了 Watchtower,所以就自动更新到了最新的 v3。

但朋友的服务器同样安装了 Watchtower,也是 Docker 部署的 Umami 却迟迟没有自动更新,一直是旧版的页面,刚开始一度以为是 Watchtower 是罢工了,但看了看别的容器却又能自动更新。

最后看了下 v3 的发布页面才知道,原来这次大版本更新还有一个 Breaking changes,新版本不再支持 MySQL 作为数据库,而朋友的 Umami 用的正是 MySQL 版本的镜像 umamisoftware/umami:mysql-latest
Umami v3 no longer supports MySQL as a database option, only PostgreSQL. If you want to migrate your data over we've written a guide to help you migrate.
由于新版没有 MySQL 版本的镜像了,这个 mysql-latest 自然也就停留在 v2 版本了。
如果你在 v2 版本用的就是 PostgreSQL,那么升级到 v3 版本是全自动完成的;而如果你正在使用 MySQL 版本想要升级到 v3,那么就需要在 v2 的最后一个版本先将 MySQL 迁移到 PostgreSQL,再从 v2 升级到 v3。
新特性
新版本除了页面布局变化比较大以外,还带来了一些新特性,建议先了解一下新特性再考虑要不要升级到 v3。
过滤器
新版的过滤器支持同时筛选多个条件,并且会通过在 URL 上拼接 query string 的方式应用到所有页面,切换到其他选项卡或是直接分享 URL 都会保留筛选结果。

链接
Umami v3 版本新增了对链接的监控,本质上就是一个短链接跳转,可以统计链接的访问次数。美中不足的是,短链接的 Slug 不支持自定义,只能用随机字符。

像素
除了能监控网站和链接以外,Umami v3 还更新了像素功能,本质上是一个看不见的图片,可以把这个图片发布到在外部网站上(例如论坛评论等)来统计评论的浏览量等。

迁移到 PostgreSQL
如果你正在使用 MySQL 版本的 Umami,无论你现在想不想升级到 v3,都建议把数据库迁移到 PostgreSQL,这样下次想升级的时候,就可以直接升级了。
安装 Umami v2
首先,需要安装 PostgreSQL 版本的 Umami v2.19.0 初始化 PostgreSQL 数据库。
services:
umami:
image: umamisoftware/umami:mysql-latest
image: umamisoftware/umami:postgresql-v2.19.0
container_name: umami
restart: unless-stopped
network_mode: host
environment:
DATABASE_URL: mysql://username:mypassword@localhost:3306/mydb
DATABASE_TYPE: mysql
DATABASE_URL: postgresql://username:mypassword@localhost:5432/mydb
DATABASE_TYPE: postgresql
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5将 PostgreSQL 中的 _prisma_migrations 与 user 两个表清空,后面会从 MySQL 中导入。
truncate table "_prisma_migrations";
truncate table "user";也可以直接用可视化工具清空。

导出 MySQL
由于 MySQL 是通过容器安装的,需要在容器中执行 mysqldump 将其导出
docker exec -i mysql-container mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -u username -p mydb > mydbdump.sql接着将 MySQL 的反引号 ` 替换为 PostgreSQL 需要的双引号 "
sed -i 's/`/"/g' mydbdump.sql一般情况下,按照上面的步骤就处理完就可以导入 PostgreSQL 了,但我的数据库里有一条“西安”朋友的访问记录,而 \' 在 PostgreSQL 中无法识别,还需要将它替换成 ''
sed -i "s/\\\\'/''/g" mydbdump.sql
导入 PostgreSQL
将处理后的 sql 文件导入到 PostgreSQL 中
docker exec -i postgresql-container psql -U username -d mydb < mydbdump.sql升级 v3
完成 PostgreSQL 数据库的导入之后,你应该可以在 v2.19.0 版本中看到所有的数据,确认无误后,将 Docker 镜像的 tag 修改为 latest。稍等片刻,等容器重启后,Umami 就顺利的升级到 v3 了!
services:
umami:
image: umamisoftware/umami:postgresql-v2.19.0
image: umamisoftware/umami:latest
container_name: umami
restart: unless-stopped
network_mode: host
environment:
DATABASE_URL: postgresql://username:mypassword@localhost:5432/mydb
DATABASE_TYPE: postgresql
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5






