🥶

【NestJS × Prisma × MySQL】npx prisma migrate dev --nameエラーの対処法

2022/09/25に公開約3,300字

こんにちは、マンボウです。
NestJS × Prismaのマイグレーションまでで何度かエラーに出会ったので、備忘録としてここに記します。

terminal
$ npx prisma migrate dev --name 〇〇

P1000: Authentication failed against database server at 127.0.0.1, the provided database credentials for user are not valid.

terminal
$ npx prisma migrate dev --name 〇〇

>> P1000: Authentication failed against database server at `127.0.0.1`, the provided database credentials for `user` are not valid.

P1000エラーはPrismaのエラーです。

みんな大好きDeepL先生に聞いてみると、

と言われます。

prisma/schema.prismaで参照しているデータベースの認証情報が間違っているときに起こるエラー。

.env
DATABASE_URL="mysql://USER:PASSWORD@HOST:PORT/DATABASE"

で入力する必要があります。
local環境で環境構築している場合は、local環境のMySQLの設定を確認してください。

Dockerで環境構築している場合は、docker-compose.ymlファイルを確認ください。

docker-compose.yml
version: '3.7'
services:

...

  db:
    image: mysql:5.7
    platform: linux/x86_64
    container_name: mysqldb
    tty: true
    stdin_open: true
    volumes:
      - ./db/dev:/docker-entrypoint-initdb.d
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_DATABASE: database
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_USER: user
      MYSQL_PASSWORD: password 
      TZ: Asia/Tokyo
    ports:
      - '3306:3306'

これは一種の例です。
docker-compose.ymlファイルが上記の場合は、

+ DATABASE_URL="mysql://user:password@localhost:3306/db"

こんな感じ。
自分の環境に応じて書き換えていきましょう。

P1001: Can't reach database server at 127.0.0.1:3307

terminal
$ npx prisma migrate dev --name 〇〇

>> P1001: Can't reach database server at `127.0.0.1`:`3307`

これは単純に、.envファイルのPORT情報が間違っています。

と言われています。
例えば、

docker-compose.yml
version: '3.7'
services:

...

  db:
    image: mysql:5.7
    platform: linux/x86_64
    container_name: mysqldb
    tty: true
    stdin_open: true
    volumes:
      - ./db/dev:/docker-entrypoint-initdb.d
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_DATABASE: database
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_USER: user
      MYSQL_PASSWORD: password 
      TZ: Asia/Tokyo
    ports:
      - '3306:3306'

上記と同じdocker-compose.ymlファイルがあったとしたら、

.env
                                    |------------| この部分
DATABASE_URL="mysql://user:password@127.0.0.1:3307/db"

>> P1001: Can't reach database server at `127.0.0.1`:`3307`

とかになっていると、このエラーが出ます。

正しいPORT情報に書き換えておきましょう。

- DATABASE_URL="mysql://user:password@127.0.0.1:3307/db"
+ DATABASE_URL="mysql://user:password@localhost:3306/db"

Error validating datasource db: the URL must start with the protocol mysql://.

terminal
$ npx prisma migrate dev --name 〇〇

>> Error validating datasource `db`: the URL must start with the protocol `mysql://`.

これも同じく、.envの記述ミスで起こるエラーです。

.env
# ダブルクオーテーションが閉じられていない
DATABASE_URL="mysql://user:password@localhost:3306/db

自分がこのエラーを発生させたときは、上記のようにクオーテーションが閉じられていませんでした。

下記のように修正すればOK。

# クオーテーションを閉じる
- DATABASE_URL="mysql://user:password@localhost:3306/db
+ DATABASE_URL="mysql://user:password@localhost:3306/db"

Discussion

ログインするとコメントできます