はじめに
MySQL8.0のDBコンテナをサクッと作成し、MySQLのコマンド練習したかったので、下記の記事を参考にDockerを使って環境構築した。
事前準備
環境構築に必要なファイルは下記3つ
docker-compose
version: "3"
services:
db:
image: mysql:8.0
volumes:
- db-store:/var/lib/mysql
- ./logs:/var/log/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
ports:
- ${DB_PORT}:3306
db-testing:
image: mysql:8.0
volumes:
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
tmpfs:
- /var/lib/mysql
- /var/log/mysql
environment:
- MYSQL_DATABASE=${DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASS}
- MYSQL_ROOT_PASSWORD=${DB_PASS}
- TZ=${TZ}
volumes:
db-store:
.env
DB_NAME=database
DB_USER=root
DB_PASS=password
DB_PORT=13306
TZ=Asia/Tokyo
my.cnf
# MySQLサーバーへの設定
[mysqld]
# 文字コード/照合順序の設定
character-set-server = utf8mb4
collation-server = utf8mb4_bin
# タイムゾーンの設定
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# デフォルト認証プラグインの設定
default-authentication-plugin = mysql_native_password
# エラーログの設定
log-error = /var/log/mysql/mysql-error.log
# スロークエリログの設定
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5.0
log_queries_not_using_indexes = 0
# 実行ログの設定
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log
# mysqlオプションの設定
[mysql]
# 文字コードの設定
default-character-set = utf8mb4
# mysqlクライアントツールの設定
[client]
# 文字コードの設定
default-character-set = utf8mb4
Docker-build
$ docker-compose up -d #コンテナ構築
$ docker-compose ps #コンテナ確認
MySQLへログイン
$ docker-compose exec db bash -c 'mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}'
$ docker-compose exec db bash #MySQLサーバーへアクセス
$ mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} #MySQLへログイン
Docker-初期化
$ docker-compose down --volumes #コンテナ初期化
おわりに
Docker-Buildまでは順調に進めることが出来た。
mysqlのテストデータを保存・移動・読込で、下記3点で詰まったが無事解決する事が出来。
これでMySQLのコマンド練習に取り掛かれる!
【詰まった所】
・ローカル内のディレクトリをコンテナ内のディレクトリにコピー
→DockerでMySQLサーバーへアクセスして、所定のディレクトリを指定してコピー
・コンテナ内のディレクトリ内のファイルを開く際、ERROR 1044 (42000) の権限エラー
→コンテナログイン時のuserをrootに変更
・コンテナ内に保存したmysqlデータを読み込む際に、mysqlデータ内のsourceが実行されない。
→mysqlデータが置いてあるディレクトリでコマンドを実行しないと、sourceが実行されなかった。