You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Strapi 4(macOS)切换MySQL数据库未生效问题

Strapi 4 切换MySQL数据库不生效的解决步骤

1. 检查并修正环境变量

打开项目根目录下的.env文件,确保以下配置正确:

DATABASE_CLIENT=mysql2
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_NAME=你的数据库名(需提前在MySQL中创建)
DATABASE_USERNAME=MySQL用户名
DATABASE_PASSWORD=MySQL密码

注意:env('DATABASE_CLIENT', 'mysql2')的第二个参数是默认值,如果.env里仍设置DATABASE_CLIENT=sqlite,会直接覆盖默认值,导致配置不生效。

2. 安装mysql2依赖

在项目根目录执行命令安装MySQL驱动:

yarn add mysql2
# 或使用npm
npm install mysql2

3. 补全database.js的完整配置

确保/backend/config/database.js文件完整返回正确的连接配置,完整示例如下:

const path = require('path');

module.exports = ({ env }) => {
  const client = env('DATABASE_CLIENT', 'mysql2');

  const connections = {
    mysql: {
      connection: {
        connectionString: env('DATABASE_URL'),
        host: env('DATABASE_HOST', 'localhost'),
        port: env.int('DATABASE_PORT', 3306),
        database: env('DATABASE_NAME', 'strapi'),
        user: env('DATABASE_USERNAME', 'strapi'),
        password: env('DATABASE_PASSWORD', 'strapi'),
        ssl: env.bool('DATABASE_SSL', false) && {
          key: env('DATABASE_SSL_KEY', undefined),
          cert: env('DATABASE_SSL_CERT', undefined),
          ca: env('DATABASE_SSL_CA', undefined),
          capath: env('DATABASE_SSL_CAPATH', undefined),
          cipher: env('DATABASE_SSL_CIPHER', undefined),
          rejectUnauthorized: env.bool('DATABASE_SSL_REJECT_UNAUTHORIZED', true),
        },
      },
      pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
    },
    mysql2: {
      connection: {
        host: env('DATABASE_HOST', 'localhost'),
        port: env.int('DATABASE_PORT', 3306),
        database: env('DATABASE_NAME', 'strapi'),
        user: env('DATABASE_USERNAME', 'strapi'),
        password: env('DATABASE_PASSWORD', 'strapi'),
        ssl: env.bool('DATABASE_SSL', false) && {
          key: env('DATABASE_SSL_KEY', undefined),
          cert: env('DATABASE_SSL_CERT', undefined),
          ca: env('DATABASE_SSL_CA', undefined),
          capath: env('DATABASE_SSL_CAPATH', undefined),
          cipher: env('DATABASE_SSL_CIPHER', undefined),
          rejectUnauthorized: env.bool('DATABASE_SSL_REJECT_UNAUTHORIZED', true),
        },
      },
      pool: { min: env.int('DATABASE_POOL_MIN', 2), max: env.int('DATABASE_POOL_MAX', 10) },
    },
    sqlite: {
      connection: {
        filename: path.join(__dirname, '..', env('DATABASE_FILENAME', '.tmp/data.db')),
      },
      useNullAsDefault: true,
    },
  };

  return {
    connection: {
      client,
      ...connections[client],
      acquireConnectionTimeout: env.int('DATABASE_CONNECTION_TIMEOUT', 60000),
    },
  };
};

重点:必须确保文件最后返回包含client和对应连接配置的对象,否则Strapi会自动 fallback 到SQLite。

4. 清理缓存并重新构建

执行以下命令清理旧缓存和构建文件,再重新启动服务:

# 删除缓存和构建目录
rm -rf .cache dist
# 重新构建
yarn build
# 启动服务
yarn develop

5. 验证MySQL服务状态

在macOS上确认MySQL服务已启动:

brew services start mysql

同时确保你配置的数据库已创建,且MySQL用户名/密码拥有该数据库的读写权限。

内容的提问来源于stack exchange,提问作者Raymond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:16:07