umami 升级记 — 能跑千万别折腾
内容提要
本文讲述了升级umami时遇到的问题和解决方法,包括两种错误提示和相应的解决方案。第一种错误可通过命令回滚解决,第二种错误需修改数据库文件中的代码。文章提供了具体的修改方法和注意事项。作者总结了升级过程的繁琐性和对SQL的不熟悉所带来的困扰。
延伸解读
升级失败的两类错误与回滚操作
升级 umami 时,yarn build 可能因数据库迁移失败而中断。第一种错误是 Prisma 检测到失败的迁移记录,提示 P3009,此时可用 npx prisma migrate resolve --rolled-back 05_add_visit_id 回滚该迁移。第二种错误是 MySQL 8 以下缺少 BIN_TO_UUID 函数,导致迁移文件中的 SQL 无法执行,同样需要先回滚再修改迁移文件。
兼容旧版 MySQL 的修改要点
针对 BIN_TO_UUID 缺失,作者直接修改 db/mysql/migrations/05_add_visit_id/migration.sql,将 BIN_TO_UUID(...) 替换为 UUIDv4(),并在数据库中创建 UUIDv4 函数。若创建函数时提示权限或二进制日志错误,需在 my.cnf 添加 log_bin_trust_function_creators = 1 并重启数据库。过程中还可能遇到列已存在等错误,需根据提示手动调整。
后续迁移的列改名问题处理
在 06_session_data 迁移中,可能因 SQL 语法错误导致失败,错误码 1064。作者的做法是回滚该迁移,然后在数据库管理工具中手动修改列名,并删除 migration.sql 中相关的 DropIndex 和 AlterTable 语句,只保留创建索引部分,再重新执行迁移。这反映出旧版 MySQL 对某些 SQL 语法支持不足,需要人工干预。
升级过程的反思与建议
作者总结升级过程繁琐,主要因为不熟悉 SQL 且 MySQL 版本较低,导致需要多次手动修改迁移文件和数据库。虽然官方文档步骤简单,但实际兼容性问题频发。因此,对于稳定运行的服务,若无必要,不建议轻易升级,以免耗费大量时间处理意外错误。
Q&A
升级 umami 时遇到的常见错误有哪些?
常见的错误有 P3009 和 P3018,分别是迁移失败和缺少函数 BIN_TO_UUID 的错误。
如何解决 umami 升级中的 P3009 错误?
可以通过命令回滚解决,使用命令 npx prisma migrate resolve --rolled-back 05_add_visit_id。
在 MySQL 8 以下如何处理缺少 BIN_TO_UUID 函数的问题?
需要修改 migration.sql 文件,将 BIN_TO_UUID 替换为 UUIDv4,并创建 UUIDv4 函数。
升级 umami 时如何修改 my.cnf 文件?
在 my.cnf 文件中添加 log_bin_trust_function_creators = 1,然后重启数据库。
如果在数据库中修改列名失败,该怎么办?
可以直接在数据库管理工具中修改列名,或者将列名改为其他名称后再执行。
升级 umami 的过程有什么注意事项?
注意 SQL 语法和权限问题,确保在修改数据库时备份数据,以防止数据丢失。