結論
- MySQLのバージョンを5.7系から8.0に変更する
- MySQL8.0の認証方法をcaching_sha2_passwordからmysql_native_passwordに変更
環境
- Docker
- Ruby 2.6.6
- Rails 6.0.3.6
- MySQL 5.7.22
経路
既に動いていたプロジェクトに参画することになり、環境構築をすることになった私。
開発環境がDockerでだったため、環境構築手順書もあり、すんなりいくだろうと思っていたが、すぐさまエラーが出てしまう。(あるある)
プロジェクトに参画している人の中で、私だけM1だったので、そのせいでエラーが出ていた。
コンテナは作れたが起動ができない。
よくあるdocker-compose.ymlのdbのところにplatform: linux/amd64
を追加する方法でも解決しませんでした。
最近は、M1の人も結構増えてきていると思うので、備忘も兼ねて書くことにしました。
エラー内容
runtime: failed to create new OS thread (have 2 already; errno=22)
原因
M1がMySQLの5.7系に対応していないことが原因でした。
5.7に対応していないことを記述していた記事があったのですが、探せなかったので見つかり次第追記します。
対策
・MySQLのバージョンを8.0に変更する
docker-compose.yml
db:
platform: linux/amd64
restart:
always
image: mysql:5.7.22
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- db-data:/var/lib/mysql
を下記のように変更
db:
platform: linux/amd64
restart:
always
image: mysql:8.0 # ここを5.7.22から8.0に変更
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- db-data:/var/lib/mysql
この状態で、docker-compose up行い、コンテナを起動します。
しかし、私は、この段階では肝心なapp(アプリ本体)のコンテナが起動できていない状態でした。
それは、appコンテナの最初の起動時にdatabaseを作成するという処理があったため、データベースにアクセスできないというエラーが出ていました。
MySQLのバージョンを8.0にした後、認証方法を変更するのを忘れていました。
MySQL8.0ではユーザーの認証方法がmysql_native_passwordからcaching_sha2_passwordになっていて、いつも通りにパスワードを直打ちしては、弾かれてしまいます。
rootユーザーの認証方法をcaching_sha2_passwordからmysql_native_passwordに変更します。
・データベースのコンテナに入る
docker-compose exec db bash
・MySQLの対話モードに入る
mysql -u root -p
・現在のrootユーザーの認証方法を確認
mysql> select host, user, plugin from mysql.user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
+-----------+------------------+-----------------------+
・rootユーザーの認証方法を変更
ALTER USER root@"%" IDENTIFIED WITH mysql_native_password BY "password";
・再度rootユーザーの認証方法が変更されていることを確認
mysql> select host, user, plugin from mysql.user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | mysql_native_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
+-----------+------------------+-----------------------+
完了!!!!!!!!!!!!!!!!!!!!!
これで私の場合は、コンテナ起動できました。
これでも解決できなかった方はすみません。
コメント