我们正在将 Metabase v0.24.1 部署从 AWS RDS MySQL 5.7 迁移到 AWS Aurora MySQL Serverless(兼容 5.6)。当我们启动 Metabase 时,应用程序尝试运行的每个查询都会返回某种形式的此错误:
Field 'id' doesn't have a default value
完全错误:
03-17 16:07:57 [1mERROR metabase.middleware[0m :: [31mPOST /api/database 500 (68 ms) (0 DB calls)[0m
{:message "Field 'id' doesn't have a default value",
:stacktrace
["api.database$fn__29894$fn__29897.invoke(database.clj:233)"
"api.common.internal$do_with_caught_api_exceptions.invokeStatic(internal.clj:229)"
"api.common.internal$do_with_caught_api_exceptions.invoke(internal.clj:224)"
"api.database$fn__29894.invokeStatic(database.clj:215)"
"api.database$fn__29894.invoke(database.clj:215)"
"middleware$enforce_authentication$fn__38784.invoke(middleware.clj:120)"
"api.routes$fn__38908.invokeStatic(routes.clj:58)"
"api.routes$fn__38908.invoke(routes.clj:58)"
"routes$fn__39540$fn__39541.doInvoke(routes.clj:64)"
"routes$fn__39540.invokeStatic(routes.clj:60)"
"routes$fn__39540.invoke(routes.clj:60)"
"middleware$log_api_call$fn__38883$fn__38885.invoke(middleware.clj:329)"
"middleware$log_api_call$fn__38883.invoke(middleware.clj:328)"
"middleware$add_security_headers$fn__38833.invoke(middleware.clj:243)"
"middleware$bind_current_user$fn__38788.invoke(middleware.clj:140)"
"middleware$maybe_set_site_url$fn__38837.invoke(middleware.clj:266)"],
:sql-exception-chain ["SQLException:" "Message: Field 'id' doesn't have a default value" "SQLState: HY000" "Error Code: 1364"]}
尝试添加新数据库也会通过元数据库 UI 返回相同的错误。
我们已验证 RDS db 参数在我们正在迁移的数据库之间是相同的,不包括可能在 Aurora Serverless 和 MySQL 5.7 默认值之间更改的引擎默认配置。
另一个值得注意的变化是,我们正在从在我们拥有的 EC2 实例上运行的正常 ECS 任务转移到 Fargate 任务,但两者之间的任务定义是相同的。
编辑:我在sql_mode
参数中发现了 Aurora Serverless 和 MySQL 5.7 之间的另一个配置不一致。在 5.7 中,它NO_ENGINE_SUBSTITUTION
默认设置为,而在无服务器中,它设置为0
.
sql_mode
在将我的无服务器部署更新到之后,NO_ENGINE_SUBSTITUTION
我发现数据库本身的实际配置仍然不一致。在 5.7 部署中返回SELECT @@sql_mode;
,并且在无服务器部署中返回,即使参数组未设置为此值也是如此。NO_ENGINE_SUBSTITUTION
STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
编辑 2:我没有提到我们用于将数据传输到新数据库的方法,即 AWS DMS 版本 3.3.1。似乎 DMS 不会复制auto_increment
需要存在于id
元数据库中的列上的表属性。这可能是根本问题。