6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Configuring and Running MySQL 5.6.26 in Docker Container

Last updated at Posted at 2015-09-01

概要

MySQLのOFFICIAL REPOSITORYで公開されているMySQL 5.6.26イメージからコンテナを作成、実行するまでの手順です。

環境

下記の環境で動作確認を行いました。

参考

下記のサイトを参考にさせて頂きました。

MySQL 5.6.26イメージの取得

pull
$ docker pull mysql:5.6.26
Pulling repository docker.io/library/mysql

...省略...

Status: Downloaded newer image for mysql:5.6.26

試しにイメージからコンテナを作成し実行します。

run
$ docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=rootpw mysql:5.6.26

ログになにかエラーが出力されていないか確認します。

logs
$ docker ps --format="{{.ID}}"
a49349c94f7d

$ docker logs a49349c94f7d

コンテナ内にある既存のmy.cnfの内容を確認します。

exec
$ docker exec -it my-mysql bash

root@a49349c94f7d:/# cat /etc/mysql/my.cnf
my.cnf
[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
skip-host-cache
skip-name-resolve
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address   = 127.0.0.1

# log-error      = /var/log/mysql/error.log

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

差分のmy.cnfの作成

差分の設定ファイルを作成します。
この設定ファイルは上記の既存my.cnfの!includedirで指定するディレクトリへ配置することで反映されます。

my.cnf
[mysqld]
innodb_buffer_pool_size = 64M
innodb_file_per_table = 1
innodb-status-output = 1
innodb-status-output-locks = 1
default-storage-engine = innodb

log_bin = mysql-bin

port = 3306
server_id = 1

character-set-server = utf8
collation-server = utf8_general_ci

transaction-isolation = REPEATABLE-READ

# autocommit = 0
explicit_defaults_for_timestamp = true

lower_case_table_names = 1

# Logging
log_output = FILE
log_warnings = 1
log_error = /var/log/mysql/error.log
general_log = 1
general_log_file = /var/log/mysql/general_query_all.log
log-slow-admin-statements = 1
log-queries-not-using-indexes = 1
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /var/log/mysql/slow_query.log

[mysql]
default-character-set = utf8
show-warnings

差分設定ファイル

差分の設定ファイル(my.cnf)は、WindowsPCと仮想マシン(ホスト)の共有フォルダ(%USERPROFILE%)下ではなく、それ以外のディレクトリに配置し、パーミッションを644に設定します。
共有フォルダに置くとファイルのパーミッションが777になり、このパーミッションではMySQLが参照してくれないためです。

共有フォルダに置くとパーミッションが777になり変えられません。

-rwxrwxrwx    1 docker   staff          747 Aug 31 14:30 my.cnf*

且つこの状態でMySQLを起動すると下記の警告メッセージがログに出力され差分の設定ファイルが反映されませんでした。

Warning: World-writable config file ‘/etc/my.cnf’ is ignored

この記事では仮想マシンの/home/docker/mysqlディレクトリにmy.cnfを置き、このディレクトリをコンテナとマッピングします。

  • host : /home/docker/mysql
  • container : /etc/mysql/conf.d
mapping
-v /home/docker/mysql:/etc/mysql/conf.d

データディレクトリ

データファイルを永続化するためデータディレクトリはWindowsPCとの共有フォルダ下に置きます。

  • Windows : %USERPROFILE%/dev/docker/mysql5.6.26/data
  • host : /c/Users/username/dev/docker/mysql5.6.26/data
  • container : /var/lib/mysql
mapping
-v /c/Users/username/dev/docker/mysql5.6.26/data:/var/lib/mysql

ログディレクトリ

ログファイルも一応永続化しておきます。
ログディレクトリはWindowsPCとの共有フォルダ下に置きます。

  • Windows : %USERPROFILE%/dev/docker/mysql5.6.26/logs
  • host : /c/Users/username/dev/docker/mysql5.6.26/logs
  • container : /var/log/mysql
mapping
-v /c/Users/username/dev/docker/mysql5.6.26/logs:/var/log/mysql

コンテナの実行

上記の設定を元にコンテナを作成し実行します。
(上記で作成していたコンテナは削除しておきます。)

$ docker run -d --name my-mysql -p 3306:3306 -v /home/docker/mysql:/etc/mysql/conf.d -v /c/Users/username/dev/docker/mysql5.6.26/data:/var/lib/mysql -v /c/Users/username/dev/docker/mysql5.6.26/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=rootpw mysql:5.6.26

なにか問題が発生していないかコンテナのログを確認します。

docker@default:~/mysql$ docker logs 140027f459b8
2015-08-31 16:00:15 0 [Note] mysqld (mysqld 5.6.26-log) starting as process 1...

MySQL Clientコンテナから接続

実行中のMySQLコンテナへMySQL Clientコンテナから接続できるか確認します。

$ docker run -it --link my-mysql:mysql -v /home/docker/mysql:/etc/mysql/conf.d --rm mysql:5.6.26 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

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.

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Windows版のMySQL Clientから接続

Windows版のMySQL Clientから接続できるか確認します。

> mysql.exe -h 192.168.99.100 -P 3306 -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

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.

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?