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
|
参考