解决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
相关产品推荐
相关产品推荐

