MySQL

将 Better Auth 与 MySQL 集成。

MySQL 是一种流行的开源关系型数据库管理系统(RDBMS),广泛用于构建 Web 应用程序和其他类型的软件。它提供了灵活且可扩展的数据库解决方案,能够高效地存储和检索数据。 了解更多信息请访问:MySQL

示例用法

确保你已经安装并配置了 MySQL。
然后,你可以直接将其连接到 Better Auth。

auth.ts
import { betterAuth } from "better-auth";
import { createPool } from "mysql2/promise";

export const auth = betterAuth({
  database: createPool({
    host: "localhost",
    user: "root",
    password: "password",
    database: "database",
    timezone: "Z", // 确保时区值一致非常重要
  }),
});

更多信息请阅读 Kysely 的文档中的 MySQLDialect

Kysely 适配器依赖于 MySQL 驱动程序报告 UPDATE 的“匹配行数”语义(mysql2 默认启用 CLIENT_FOUND_ROWS 客户端标志——请保持开启)。如果你选择关闭它——例如通过向 createPool 传递 flags: '-FOUND_ROWS'——MySQL 将回退到“变更行数”语义。此时,一个幂等的 UPDATE(新值等于当前值)会报告零个受影响行,而 adapter.updateincrementOneupdateMany 会将其视为未命中,即使谓词实际上已匹配。

Schema 生成与迁移

Better Auth CLI 允许你基于 Better Auth 的配置和插件生成或迁移数据库架构。

MySQL 架构生成

MySQL 架构迁移

✅ 支持✅ 支持
npx auth@latest migrate

连接

当 Better-Auth 需要在单个查询中从多个表获取相关数据时,数据库连接非常有用。 /get-session/get-full-organization 等端点都能从此功能中获得很大帮助,根据数据库延迟的不同,性能提升可达 2 到 3 倍。

Kysely MySQL 方言自 1.4.0 版本起原生支持连接。 要启用此功能,请在你的 auth 配置中将 advanced.database.joins 设置为 true

auth.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  advanced: {
    database: {
      joins: true,
    },
  },
});

附加信息

MySQL 是通过 Kysely 适配器在底层支持的,任何由 Kysely 支持的数据库同样受到支持。 (详细阅读

如果你想提升性能或寻求优化建议,可以参考我们的 性能优化指南