ローカル環境に影響なしでMySQL8を試してみてエだろ…"お気軽"にヨ…
Docker for Macをインストール
$ 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)
できね〜
ホストは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
ヌ"ア"ア"
パスワードの認証方法が変わっているのだね
外部からのパスワード認証で接続可能なユーザーを作成する
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
いけました!!!!ヴォエ!!!!
これでやりたい放題できますね
感想
お気軽ではなかったが勉強にはなった!ポジティブバカの言葉です