基礎からのMySQLで学習中
本ではXAMPP、MAMPで環境構築の説明から入っている。正直懐かしいというか「今そんなのインストールしないでdockerでやるよな」と思い、自分で環境を作ってみることに。
docker MySQL公式のイメージを使う
「公式イメージあるんだからそれ使えばいいじゃん。」くらいのスタートから。パラメーター盛々にしない最低限だとどうなるかやった結果がこれ。
docker run -d -e MYSQL_ROOT_PASSWORD=root mysql
環境変数MYSQL_ROOT_PASSWORDだけは指定してあげないと下のように怒られる。
(最初MYSQL_ROOT_PASSWORDも設定しないでExpiredって何だよって小一時間、原因がlogみるまで全く分からなかったのは内緒)
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
中に入って操作したいがコンテナ名も指定してないから
docker ps
docker psでコンテナidを確認
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd2c414780ee mysql "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 3306/tcp, 33060/tcp condescending_golick
コンテナidを指定してexec bashで中へ入る。(git commit idみたいにidは全文字入れなくてもいける。)
docker exec -it cd2c bash
bash入ったらmysqlコマンドでrootログイン
bash-4.4# mysql -u root -proot
入れた。(パスワードの入力方法のwarningはスルー)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
正直ボリュームの理解がイマイチだからデータの永続化で躓きそうと思いながら、、、まあ毎回データ消えるコンテナでもSQL文色々打ちながら覚えていくだけだし、大丈夫かな?という考えに至り、とりあえずスタート地点に立った。
日本語入力ができなくて躓く
データが残らないコンテナで、本読みながらコマンドラインでSQL文をふむふむとか思いながら入力していて、次の文ではまる。
INSERT INTO tb1 VALUES('A101','佐藤',40);
!? 佐藤が入力出来ねえ。
どうやらdocker execで中に入っての操作だと日本語が入力できないらしい…。
とりあえず’sato’とやって進めるが、なんとか出来ないものかずっとひっかかりが残る…。
公式docker-compose通りadminerから操作で日本語入力できた
docker mysqlの日本語入力どうにかならないものかと考えながら、コンテナLinuxに日本語localをインストールすればいいらしいが、Linuxとか触ったことないしコマンド見ても何しているかわからず、すぐ出来なそう…。
phpMyAdminのコンテナとか入れて、ブラウザからSQL文ポチポチ打つ形でやるかといろいろ調べていたら公式docker-composeに以下のようなのを見つける。
# Use root/example as user/password credentials
version: '3.1'
services:
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
ports: – 8080:8080ってあるからこれブラウザからmySQL操作できるやつなんじゃね?って思い。
docker-compose up -d
書いてある通り起動し、http://localhost:8080にアクセス。
ブラウザからアクセス出来た!
SQL文で日本語入力出来る!
データも反映されている!
adminerとか初めて聞いたけど、日本語使えるからこれで本の勉強していくことに決定。
ボリュームを使ってデータの永続化は簡単にできた
バインドマウントするためにローカルパス:コンテナ内パスの一文をいれるだけ。
docekr-compose.ymlのenvironmentの下に
volumes:
- ./data/mysql:/var/lib/mysql
と入れるだけ。
ローカルフォルダに以下のようなものが出来てdocker-compose downしてupしてもmysqlのデータが消えないコンテナができた。
以下docekr-compose.yml全文
version: "3"
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./data/mysql:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
いずれは日本語が入力できるMySQL環境をdockerで作りたい
要はlinuxに日本語入れて、MySQLもutf8mb4設定すればいいっぽいけど、イマイチわからん。
だいたいdockefileを噛ませたdocker-composeなんてあの本になかったぜ。もうちょっと色んな記事見て勉強します。
とりあえずadminerとかいうのを知れたから満足。
プログラミング学習って公式に始まり公式に戻るよなと思った休日でした。
コメント