mysql Ver 8.0.19 for osx10.13 on x86_64
あー、これは知ってないと分からないと思います。
言いたいことは下記の参考記事に全部書いてあります。
参考記事: 【node.js】MySQL8.0に接続できない。Error: ER_NOT_SUPPORTED_AUTH_MODE
まぁ、要約するとMySQL8はパスワードの管理方式が変わって
古いモジュールのmysql
は追従出来ていません。
mysql
モジュールの作者はとっくの昔に、
mysql2に移行しており
そちらで開発・新機能追加を行っています。
Promiseなんかも使えるので、
今後async/await構文でぶいぶいNode.js開発がしたいならmysql2へ移行しましょう。
使い方はmysqlモジュールとほぼ同じ使い方が出来るはずです。
js
1const mysql = require('mysql2'); // 使うモジュール名を変更しただけ
2
3const con = mysql.createConnection({
4 host: "localhost",
5 user: "root",
6 password: "*****",
7});
8
9con.connect()
開発用環境のMacにMySQLを入れるのは構築難易度が高く
権限周りの根深い問題だと思いますので、
ここはDockerを使ったMySQLサーバの構築法を案内します。
※最新のM1 MacだとまだDockerが使えないので環境構築を続ける必要がありますが……
Docker for Macを導入していなければ、
まず公式からダウンロードします。
DockerはCLIツールなので、
コンソールを開いて操作する必要があります。
端末を開くとdocker
やdocker-compose
のコマンドが追加されて使えるようになっているはずです。
bash
1$ docker -v
2Docker version xx.xx.x, build xxxxxxx
3
4$ docker-compose -v
5docker-compose version x.xx.x, build xxxxxxx
Dockerの動作原理は
Linuxはディストリビューションが異なるOS間でも、
コンパイルした実行ファイルのファイルフォーマットが同一なので、
仮想的なHDDをひっつけてディレクトリ構成を同じにしてやれば動くでしょ?を元にしています。
因みにMacOSはOSが根本から違うので対象から外れますが、
Docker for Macにより仮想Linuxマシンを立ち上げて、
その中でDockerを動作させる事で実現しています。
Docker社はDocker Hubという
Dockerのイメージファイルを配布するサイトも運営しています。
その中には「MySQLサーバーを使える状態に設定済み」のイメージもあり、
無料で配布されているので誰でもダウンロードして使う事が出来ます。
参考リンク: mysql - Docker Hub
Dockerではdocker run
コマンドを使う事で、
このDockerイメージファイルを元にコンテナを1個起動する事ができます。
(これはmysqlの説明書きにあった実行するファイルです)
bash
1$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
例えばこういうコマンドを--name some-mysql
のオプションを変えつつ3回実行すると、
MySQLサーバが3個作られて動作し始めます。
しかし、このコンテナというのはすぐ壊してまた起動し直すという思想で作られているので、
コンテナを作る度にdocker run ....
を「じゅげむ」のように繰り返すわけです。
腱鞘炎になるわ。
そこで、コマンドをYAMLファイルに記述して保管しようという
Docker Composeをセットで利用します。
何も知識が無い所から設定するのは大変だと思うので、
私が最初から使える状態でdocker-compose.yml
ファイルのテンプレートを用意しました。
仕様はとりまこんな感じです。
- イメージはmysql8の最新を利用
- ユーザ名
root
、パスワードpassword
で接続可能
localhost:3306
で接続可能(ただし、コンソールから繋ぐ場合はホスト名を127.0.0.1
にすること)
- ファイルの永続化の為に
volumes
に値を設定して、Macマシンからディレクトリを注入してそこにファイルを書かせる仕組みにしている
- おまけとしてphpMyAdminも併設、
http://localhost:4000
で閲覧出来る
YAML
1version: "3.6"
2services:
3 db:
4 image: mysql:8
5 environment:
6 MYSQL_ROOT_PASSWORD: password
7 ports:
8 - 3306:3306
9 volumes:
10 - mysql-db:/var/lib/mysql
11 myadmin:
12 image: phpmyadmin/phpmyadmin
13 environment:
14 PMA_HOST: db
15 PMA_USER: root
16 PMA_PASSWORD: password
17 ports:
18 - 4000:80
19
20volumes:
21 mysql-db:
22 driver: local
まずこれをdocker-compose.yml
というファイルにして保存します。
同じディレクトリでdocker-compose
コマンドを実行すると裏でYAMLファイルをロードして準備してくれるでしょう。
bash
1# 今の状態を確認する
2# 何も起動していないので何も表示されない
3$ docker-compose ps
4
5# バックグランドモードでコンテナ達を起動する
6# 初回はmysqlイメージのダウンロード等から始まるので時間がかかるはず
7$ docker-compose up -d
8
9$ docker-compose ps
10 Name Command State Ports
11-----------------------------------------------------------------------------------------------
12database_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
13database_myadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:4000->80/tcp
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 08:56
2021/01/19 09:07
2021/01/19 09:33
2021/01/22 04:01
2021/01/22 05:52