Featured image of post DockerのMySQLでprisma migrate devが失敗する場合の対処法

DockerのMySQLでprisma migrate devが失敗する場合の対処法

Twitter ツイート Hatena Bookmark ブックマーク

Prismaを使おうと思ってDockerでMySQLを用意したらprisma migrate devでエラーが発生しました。

エラーメッセージ

1
2
3
4
5
6
7
8
9
$ npx prisma migrate dev --name init

Error: P3014

Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases. Read more about the shadow database (and workarounds) at https://pris.ly/d/migrate-shadow

Original error: Error code: P1010

User `docker` was denied access on the database `hoge`

原因

公式ドキュメントの「Shadow database user permissions」にも書いてありますが、migrate devはshadow databaseを作成するため CREATE, ALTER, DROP, REFERENCES ON *.* な権限が必要になります。

対処方法

Docker環境のMySQLであれば初回起動時にスクリプトを実行させることができます。

まずはdocker-compose.yamlをこのように書きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
version: '3'
services:
  db:
    image: mysql:8.0
    ports:
      - '3307:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      MYSQL_USER: 'docker'
      MYSQL_PASSWORD: 'docker'
      MYSQL_DATABASE: 'hoge'
      TZ: 'Asia/Tokyo'
    volumes:
      - db-store:/var/lib/mysql
      - ./docker/mysql/sql:/docker-entrypoint-initdb.d

volumes:
  db-store:

次に ./docker/mysql/sql 内に 1_init.sql というSQLファイルを用意します。

1
GRANT CREATE, ALTER, DROP, REFERENCES ON *.* to 'docker'@'%';

設定できたら初回の場合は docker compose up -d で起動すれば1_init.sqlが実行されます。
一度起動してしまっている場合はdownで一旦なかったことにしてしまえばいいかと思います。

1
2
$ docker compose down --rmi all --volumes
$ docker compose up -d

参考

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。