質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

578閲覧

TypeORMのマイグレーションを実行してEntityからDBのテーブルを生成したい。

miu1

総合スコア5

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2023/06/05 22:29

編集2023/06/05 22:40

実現したいこと

TypeORMを利用したいため、動作検証として
typeorm initでExpressのテンプレートから作成したものを利用して、
TypeORMのマイグレーションを実行してEntityからDBのテーブルを生成できるように環境構築しています。

しかし、公式ドキュメントの通りに実行してもマイグレーションファイルは生成できるのに、マイグレーションが実行できないです。
わかるかたいらっしゃいましたら教えてください。

command

1npx typeorm init --name MyProject --database mysql --express

project

1// テンプレートそのものですが、記載は一部省略 2MyProject 3 - src 4 - migrations 5 - entity 6 - data-source.ts 7 - package.json 8 - tsconfig.json

package.json

1{ 2 "name": "MyProject", 3 "version": "0.0.1", 4 "description": "Awesome project developed with TypeORM.", 5 "type": "commonjs", 6 "devDependencies": { 7 "ts-node": "10.7.0", 8 "@types/node": "^16.11.10", 9 "typescript": "4.5.2" 10 }, 11 "dependencies": { 12 "typeorm": "0.3.16", 13 "reflect-metadata": "^0.1.13", 14 "mysql": "^2.14.1", 15 "express": "^4.17.2", 16 "body-parser": "^1.19.1" 17 }, 18 "scripts": { 19 "start": "ts-node src/index.ts", 20 "typeorm": "typeorm-ts-node-commonjs" 21 } 22}

tsconfig.json

1{ 2 "compilerOptions": { 3 "lib": [ 4 "es5", 5 "es6" 6 ], 7 "target": "es5", 8 "module": "commonjs", 9 "moduleResolution": "node", 10 "outDir": "./build", 11 "emitDecoratorMetadata": true, 12 "experimentalDecorators": true, 13 "sourceMap": true 14 } 15}

txt

1// data-source.ts 2import "reflect-metadata"; 3import { DataSource } from "typeorm"; 4import { User } from "./entity/User"; 5 6// mysqlはインストール済みで、以下の設定になっています。 7export const AppDataSource = new DataSource({ 8 type: "mysql", 9 host: "localhost", 10 port: 3306, 11 username: "root", 12 password: "0000", 13 database: "test_db", 14 synchronize: true, 15 logging: false, 16 entities: [User], 17 migrations: [], 18 subscribers: [], 19});

試したこと

migrationファイルの生成(成功)

command

1npx typeorm migration:create ./src/migrations/migration 2 3// または npm run typeorm migration:create ./src/migrations/migration

migrationの実行(失敗)

command

1npm run typeorm migration:run -- -d ./src/data-source.ts

console

1PS C:\Users\user\vscode-workspace\MyProject> npm run typeorm migration:run -- -d ./src/data-source.ts 2 3> MyProject@0.0.1 typeorm 4> typeorm-ts-node-commonjs migration:run -d ./src/data-source.ts 5 6Error during migration run: 7Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client 8 at Handshake.Sequence._packetToError (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) 9 at Handshake.ErrorPacket (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) 10 at Protocol._parsePacket (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Protocol.js:291:23) 11 at Parser._parsePacket (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Parser.js:433:10) 12 at Parser.write (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Parser.js:43:10) 13 at Protocol.write (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Protocol.js:38:16) 14 at Socket.<anonymous> (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\Connection.js:88:28) 15 at Socket.<anonymous> (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\Connection.js:526:10) 16 at Socket.emit (node:events:513:28) 17 at Socket.emit (node:domain:489:12) 18 -------------------- 19 at Protocol._enqueue (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Protocol.js:144:48) 20 at Protocol.handshake (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\protocol\Protocol.js:51:23) 21 at PoolConnection.connect (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\Connection.js:116:18) 22 at Pool.getConnection (C:\Users\user\vscode-workspace\MyProject\node_modules\mysql\lib\Pool.js:48:16) 23 at C:\Users\user\vscode-workspace\MyProject\src\driver\mysql\MysqlDriver.ts:1265:18 24 at new Promise (<anonymous>) 25 at MysqlDriver.createPool (C:\Users\user\vscode-workspace\MyProject\src\driver\mysql\MysqlDriver.ts:1262:16) 26 at MysqlDriver.connect (C:\Users\user\vscode-workspace\MyProject\src\driver\mysql\MysqlDriver.ts:400:36) 27 at DataSource.initialize (C:\Users\user\vscode-workspace\MyProject\src\data-source\DataSource.ts:249:27) 28 at Object.handler (C:\Users\user\vscode-workspace\MyProject\src\commands\MigrationRunCommand.ts:52:30) { 29 code: 'ER_NOT_SUPPORTED_AUTH_MODE', 30 errno: 1251, 31 sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client', 32 sqlState: '08004', 33 fatal: true 34}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/06/05 22:42

package.json に "mysql": "^2.14.1", とありますが、mysql というライブラリは古くなって、最新の MySQL に対応してなかったと思うので、mysql2 に乗り換えたら良いかも。 https://www.npmjs.com/package/mysql2
miu1

2023/06/05 22:49

ご回答ありがとうございます。 もう一度調べたらMYSQL8からパスワード認証が変わったみたいですね。 mysql2を使用するか、コマンドで変更する必要があるようです。 mysql2を使うことにしますね。
guest

回答1

0

自己解決

MySQL8からパスワード認証の方法が変わってるので、dependenciesはmysqlでなく、mysql2を利用する。

投稿2023/06/05 22:50

miu1

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問