# MySQL (/docs/adapters/mysql)

将 Better Auth 与 MySQL 集成。



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

## 示例用法 [#示例用法]

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

```ts title="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", // 确保时区值一致非常重要
  }),
});
```

<Callout>
  更多信息请阅读 Kysely 的文档中的
  [MySQLDialect](https://kysely-org.github.io/kysely-apidoc/classes/MysqlDialect.html)。
</Callout>

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

## Schema 生成与迁移 [#schema-生成与迁移]

[Better Auth CLI](/docs/concepts/cli) 允许你基于 Better Auth 的配置和插件生成或迁移数据库架构。

<table>
  <thead>
    <tr className="border-b">
      <th>
        <p className="font-bold text-[16px] mb-1">
          MySQL 架构生成
        </p>
      </th>

      <th>
        <p className="font-bold text-[16px] mb-1">
          MySQL 架构迁移
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr className="h-10">
      <td>
        ✅ 支持
      </td>

      <td>
        ✅ 支持
      </td>
    </tr>
  </tbody>
</table>

<Tabs items="[&#x22;migrate&#x22;, &#x22;generate&#x22;]">
  <Tab value="migrate">
    <CodeBlockTabs defaultValue="npm" groupId="persist-install">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="npm">
          npm
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="pnpm">
          pnpm
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="yarn">
          yarn
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="bun">
          bun
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="npm">
        ```bash
        npx auth@latest migrate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="pnpm">
        ```bash
        pnpm dlx auth@latest migrate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="yarn">
        ```bash
        yarn dlx auth@latest migrate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="bun">
        ```bash
        bun x auth@latest migrate
        ```
      </CodeBlockTab>
    </CodeBlockTabs>
  </Tab>

  <Tab value="generate">
    <CodeBlockTabs defaultValue="npm" groupId="persist-install">
      <CodeBlockTabsList>
        <CodeBlockTabsTrigger value="npm">
          npm
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="pnpm">
          pnpm
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="yarn">
          yarn
        </CodeBlockTabsTrigger>

        <CodeBlockTabsTrigger value="bun">
          bun
        </CodeBlockTabsTrigger>
      </CodeBlockTabsList>

      <CodeBlockTab value="npm">
        ```bash
        npx auth@latest generate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="pnpm">
        ```bash
        pnpm dlx auth@latest generate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="yarn">
        ```bash
        yarn dlx auth@latest generate
        ```
      </CodeBlockTab>

      <CodeBlockTab value="bun">
        ```bash
        bun x auth@latest generate
        ```
      </CodeBlockTab>
    </CodeBlockTabs>
  </Tab>
</Tabs>

## 连接 [#连接]

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

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

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

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

## 附加信息 [#附加信息]

MySQL 是通过 [Kysely](https://kysely.dev/) 适配器在底层支持的，任何由 Kysely 支持的数据库同样受到支持。 （<Link href="/docs/adapters/other-relational-databases">详细阅读</Link>）

如果你想提升性能或寻求优化建议，可以参考我们的 <Link href="/docs/guides/optimizing-for-performance">性能优化指南</Link>。

