Goalist Developers Blog

DockerでMySQL8環境をつくるよ

ローカル環境に影響なしでMySQL8を試してみてエだろ…"お気軽"にヨ…

Docker for Macをインストール

www.docker.com

$ brew update
$ brew cask install docker

VirtualBoxのこととかは考えなくてよい

Docker for Macだと
VirtualBox上にDockerホストとなるマシンを自分で作成とかなんもしないでも
デフォルトでよしなにやってくれるのだそうで(HyperKitというのでLinux VMがつくられる、軽量)
これに明確に分かるまで激しく遠回りしてしまった
最初から公式ドキュメント読んでいればそれでよかったんだ
Docker Toolbox + VirtualBoxのブログ記事がおおくて…惑わされた…

公式のMySQLイメージを入手

https://hub.docker.com/_/mysql/

$ docker pull mysql:latest
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              3da0f4853002        36 hours ago        445MB

ウム

MySQLイメージからコンテナの作成と起動

$ docker run --name mysql8.0.12 -e MYSQL_ROOT_PASSWORD=xxxxx -p 3307:3306 -d mysql:latest

ローカルのクライアント側からは3307ポートでアクセスしようと思う

起動中のプロセスリストを見てみる

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7712194c222b        mysql:latest        "docker-entrypoint.s…"   7 seconds ago       Up 7 seconds        0.0.0.0:3307->3306/tcp   mysql8.0.12

ウム

このコンテナに接続して中身を確認してみる

$ docker exec -it 7712194c222b bash

root@7712194c222b:/# mysql --version
mysql  Ver 8.0.12 for Linux on x86_64 (MySQL Community Server - GPL)

ちゃんと8が入っている〜

ユーザ作成

root@7712194c222b:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.12 MySQL Community Server - GPL

mysql> USE mysql;

mysql> CREATE USER user1 IDENTIFIED BY 'yyyyy';

mysql> CREATE DATABASE db_name;

mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'user1'@'%';

ローカルのMySQLクライアントからコンテナのDBに接続

$ mysql -u user1 -p --port 3307
Enter password: 
ERROR 1045 (28000): Access denied for user 'user1'@'localhost' (using password: YES)

できね〜

$ mysql -u user1 -p -h localhost --port 3307
Enter password: 
ERROR 1045 (28000): Access denied for user 'user1'@'localhost' (using password: YES)

できね〜

www.bunkei-programmer.net

ホストは127.0.0.1で指定でどうか

$ mysql -u user1 -p -h 127.0.0.1 --port 3307
Enter password: 
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/Cellar/mysql/5.7.21/lib/plugin/caching_sha2_password.so, 2): image not found

ヌ"ア"ア"

qiita.com

パスワードの認証方法が変わっているのだね

外部からのパスワード認証で接続可能なユーザーを作成する

Dockerコンテナ内に入って

$ docker exec -it 7712194c222b bash

mysql_native_passwordで認証するユーザー作成

root@7712194c222b:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.12 MySQL Community Server - GPL

mysql> CREATE USER nativepassuser IDENTIFIED WITH mysql_native_password BY 'yyyyy';

mysql> SELECT user, host,  plugin, authentication_string FROM user;
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
| user             | host      | plugin                | authentication_string                                                  |
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
| nativepassuser   | %         | mysql_native_password | *D7D00ED2D87ECF8666F08E30C4A6EB61AB9982FC                              |
| user1            | %         | caching_sha2_password | $A$005$~j\'SF)I2)
oVUJMUxJKcEdZom3QAppyIBBX0vu5Rh/fr.g.fbw7YMe15 |
| mysql.infoschema | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session    | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys        | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
/hN>ot             | localhost | caching_sha2_password | $A$005$NrwN
    &r(:NjHjf693xvJ9AQzt5F9J4D885VzpXnduNOLcJ.TcoYc4 |
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
6 rows in set (0.00 sec)

再度ローカルのクライアントからコンテナのDBに接続を試す…

$ mysql -u nativepassuser -p -h 127.0.0.1 --port 3307
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.12 MySQL Community Server - GPL

いけました!!!!ヴォエ!!!!
これでやりたい放題できますね

感想

お気軽ではなかったが勉強にはなった!ポジティブバカの言葉です