Error: drop table if exists `innodb_index_stats` - UNKNOWN_CODE_PLEASE_REPORT

System Information
  • **Strapi Version: 4.1.11:
  • **Operating System: Ubuntu 20.04:
  • **Database: mysql:
  • **Node Version: 16.15:
  • **NPM Version: 8.5.5:
  • **Yarn Version: 1.22.19:

Hi,

Im trying to install/run strapi on an Ubuntu server with pm2 and when i start the app the pm2 logs show:

[2022-05-18 09:26:59.838] error: drop table if exists `innodb_index_stats` - UNKNOWN_CODE_PLEASE_REPORT: Access to system table 'mysql.innodb_index_stats' is rejected.
0|replay-backend  | Error: UNKNOWN_CODE_PLEASE_REPORT: Access to system table 'mysql.innodb_index_stats' is rejected.

My configs in /my-project/config/...:

database.js:

module.exports = ({ env }) => ({
  connection: {
    client: 'mysql',
    connection: {
      host: env('DATABASE_HOST', '127.0.0.1'),
      port: env.int('DATABASE_PORT', 3306),
      database: env('DATABASE_NAME', 'mysql'),
      user: env('DATABASE_USERNAME', 'db-username'),
      password: env('DATABASE_PASSWORD', 'db-pw'),
      ssl: env.bool('DATABASE_SSL', true),
    },
  },
});

server.js:

  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 8080),
  url: 'https://test.my-domain.com',
  app: {
    keys: env.array('APP_KEYS'),
  },
});

pm2 config

ecosystem.config.js:

module.exports = {
  apps: [
    {
      name: 'my-project',
      cwd: '/home/user.name/projects/my-project',
      script: 'yarn',
      args: 'start',
      interpreter: '/bin/bash',
      env: {
        NODE_ENV: 'production',
        DATABASE_HOST: '127.0.0.1',
        DATABASE_PORT: '3306',
        DATABASE_NAME: 'mysql',
        DATABASE_USERNAME: 'db-username',
        DATABASE_PASSWORD: 'db-pw',
      },
    },
  ],
};

A longer version of the logs:

App [replay-backend:0] starting in -fork mode-
PM2               | App [replay-backend:0] online
0|replay-backend  | yarn run v1.22.19
0|replay-backend  | $ strapi start
0|replay-backend  | [2022-05-18 09:34:58.515] debug: ⛔️ Server wasn't able to start properly.
0|replay-backend  | [2022-05-18 09:34:58.516] error: drop table if exists `innodb_index_stats` - UNKNOWN_CODE_PLEASE_REPORT: Access to system table 'mysql.innodb_index_stats' is rejected.
0|replay-backend  | Error: UNKNOWN_CODE_PLEASE_REPORT: Access to system table 'mysql.innodb_index_stats' is rejected.
0|replay-backend  |     at Query.Sequence._packetToError (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
0|replay-backend  |     at Query.ErrorPacket (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
0|replay-backend  |     at Protocol._parsePacket (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/Protocol.js:291:23)
0|replay-backend  |     at Parser._parsePacket (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/Parser.js:433:10)
0|replay-backend  |     at Parser.write (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/Parser.js:43:10)
0|replay-backend  |     at Protocol.write (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/Protocol.js:38:16)
0|replay-backend  |     at TLSSocket.ondata (node:internal/streams/readable:754:22)
0|replay-backend  |     at TLSSocket.emit (node:events:527:28)
0|replay-backend  |     at TLSSocket.emit (node:domain:475:12)
0|replay-backend  |     at addChunk (node:internal/streams/readable:315:12)
0|replay-backend  |     at readableAddChunk (node:internal/streams/readable:289:9)
0|replay-backend  |     at TLSSocket.Readable.push (node:internal/streams/readable:228:10)
0|replay-backend  |     at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)
0|replay-backend  |     --------------------
0|replay-backend  |     at Protocol._enqueue (/home/user.name/projects/replay-backend/node_modules/mysql/lib/protocol/Protocol.js:144:48)
0|replay-backend  |     at Connection.query (/home/user.name/projects/replay-backend/node_modules/mysql/lib/Connection.js:198:25)
0|replay-backend  |     at /home/user.name/projects/replay-backend/node_modules/knex/lib/dialects/mysql/index.js:132:18
0|replay-backend  |     at new Promise (<anonymous>)
0|replay-backend  |     at Client_MySQL._query (/home/user.name/projects/replay-backend/node_modules/knex/lib/dialects/mysql/index.js:126:12)
0|replay-backend  |     at executeQuery (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/internal/query-executioner.js:37:17)
0|replay-backend  |     at Client_MySQL.query (/home/user.name/projects/replay-backend/node_modules/knex/lib/client.js:146:12)
0|replay-backend  |     at /home/user.name/projects/replay-backend/node_modules/knex/lib/execution/transaction.js:363:24
0|replay-backend  |     at new Promise (<anonymous>)
0|replay-backend  |     at Client_MySQL.trxClient.query (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/transaction.js:358:12)
0|replay-backend  |     at Runner.query (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/runner.js:130:36)
0|replay-backend  |     at Runner.queryArray (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/runner.js:224:21)
0|replay-backend  |     at ensureConnectionCallback (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/internal/ensure-connection-callback.js:11:19)
0|replay-backend  |     at Runner.ensureConnection (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/runner.js:307:20)
0|replay-backend  |     at processTicksAndRejections (node:internal/process/task_queues:96:5)
0|replay-backend  |     at async Runner.run (/home/user.name/projects/replay-backend/node_modules/knex/lib/execution/runner.js:30:19)
0|replay-backend  | error Command failed with exit code 1.
0|replay-backend  | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

The issue was due to a silly mistake by me so the solution was:
Create a database and add some environment variables to ecosystem.config.js