質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3764閲覧

DockerでMroongaストレージエンジンを持つMySQLを起動したい

rock_square

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2018/10/26 03:00

編集2018/10/31 08:06

DockerでMroongaストレージエンジンを持つMySQLを起動したい

前提

Docker for Windowsで、Windows上のDockerにてMySQLの環境を構築して使用しています。

現在使用しているMySQLのイメージは、公式のものを使用しています。
構成としては

C:\Docker\MySQL ┬─docker─compose.yml          └─mysql┬─mysql_data              ├─Dockerfile              └─my.cnf

となっています。
mysql_dataはデータ永続化4のため、MySQLのデータが入っています。

各ファイルの内容は

composeYml

1version: "3" 2services: 3 db: 4 build: ./mysql 5 ports: 6 - 3307:3306 7 environment: 8 MYSQL_ROOT_PASSWORD: root 9 TZ: Asia/Tokyo 10 volumes: 11 - ./mysql/mysql_data:/var/lib/mysql 12 container_name: "mysql5.7" 13 phpmyadmin: 14 image: phpmyadmin/phpmyadmin:latest 15 links: 16 - db 17 ports: 18 - 8081:80 19 environment: 20 - PMA_ARBITRARY=1 21 - PMA_HOST=db 22 container_name: "phpmyamin-la"

Dockerfile

1FROM mysql:5.7 2EXPOSE 3306 3 4ADD ./my.cnf /etc/mysql/conf.d/my.cnf 5RUN chmod 644 /etc/mysql/conf.d/my.cnf 6 7CMD ["mysqld"]

myCnf

1[mysqld] 2character-set-server=utf8 3 4[mysql] 5default-character-set=utf8 6 7[client] 8default-character-set=utf8

となっています。

実現したいこと

Mroongaというストレージエンジンを検証で使いたいのですが、

MySQL

1mysql> SHOW ENGINES; 2+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 3| Engine | Support | Comment | Transactions | XA | Savepoints | 4+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 5| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | 6| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | 7| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | 8| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | 9| MyISAM | YES | MyISAM storage engine | NO | NO | NO | 10| CSV | YES | CSV storage engine | NO | NO | NO | 11| ARCHIVE | YES | Archive storage engine | NO | NO | NO | 12| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | 13| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | 14+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 159 rows in set

一覧の中にはありませんでした。

そこで、Mroongaをインストールし、使える状態にしたいと考えています。

試したこと

公式のMySQLイメージにMroongaをインストールするのではなく、mroonga/docker(https://github.com/mroonga/docker)を使用する方法で対応してみました。

各ファイルを編集しました。
Dockerfileやmy.cnf は
https://github.com/mroonga/docker/blob/master/Dockerfile/mysql5723_mroonga807/Dockerfile
の内容を参考に、内容を変更しました。

Dockerfile

1FROM centos:centos6.9 2MAINTAINER groonga 3 4RUN yum upgrade -y 5RUN yum install -y which 6RUN yum install -y http://packages.groonga.org/centos/groonga-release-1.4.0-1.noarch.rpm && yum clean all 7RUN yum install -y https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm && yum clean all 8RUN yum install --enablerepo=mysql56-community --disablerepo=mysql57-community --disablerepo=mysql80-community -y mysql-community-client-5.6.41 mysql-community-server-5.6.41 && yum clean all 9RUN yum install -y mysql-community-mroonga-8.07 groonga-8.0.7 groonga-tokenizer-mecab-8.0.7 groonga-normalizer-mysql && yum clean all 10RUN chown -R mysql. /var/lib/mysql ; service mysqld start && mysql -e "GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" && mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql && service mysqld stop 11COPY my.cnf /etc/my.cnf 12RUN rpm -q --scripts mysql-community-mroonga | sed -n '/^postinstall scriptlet/,/^[a-z][a-z]* scriptlet/p' | tail -n +2 | head -n -1 > /root/postinstall.sh 13RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log 14COPY entrypoint.sh /root/entrypoint.sh 15 16EXPOSE 3306 17ENTRYPOINT ["/root/entrypoint.sh"]

myCnf

1# For advice on how to change settings please see 2# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html 3 4[mysqld] 5# 6# Remove leading # and set to the amount of RAM for the most important data 7# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. 8# innodb_buffer_pool_size = 128M 9# 10# Remove leading # to turn on a very important data integrity option: logging 11# changes to the binary log between backups. 12# log_bin 13# 14# Remove leading # to set options mainly useful for reporting servers. 15# The server defaults are faster for transactions and fast SELECTs. 16# Adjust sizes as needed, experiment to find the optimal values. 17# join_buffer_size = 128M 18# sort_buffer_size = 2M 19# read_rnd_buffer_size = 2M 20datadir=/var/lib/mysql 21socket=/var/lib/mysql/mysql.sock 22 23# Disabling symbolic-links is recommended to prevent assorted security risks 24symbolic-links=0 25 26# Recommended in standard MySQL setup 27sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 28 29### Added by yoku0825 30character_set_server= utf8mb4 31 32[mysqld_safe] 33log-error=/var/log/mysqld.log 34pid-file=/var/run/mysqld/mysqld.pid

composeYml

1version: "3" 2services: 3 db: 4 build: ./mysql 5 ports: 6 - 3307:3306 7 environment: 8 MYSQL_ROOT_PASSWORD: root 9 TZ: Asia/Tokyo 10 volumes: 11 - ./mysql/mysql_data:/var/lib/mysql groonga/mroonga 12 container_name: "groonga" 13 phpmyadmin: 14 image: phpmyadmin/phpmyadmin:latest 15 links: 16 - db 17 ports: 18 - 8081:80 19 environment: 20 - PMA_ARBITRARY=1 21 - PMA_HOST=db 22 container_name: "phpmyamin-la"

また、Dockerfileとmy.cnfと同じディレクトリに、 entrypoint.sh を下記内容で配置しました。

entrypointSh

1#!/bin/bash 2 3if [ ! -e /var/lib/mysql/ibdata1 ] ; then 4 ### If overroded my.cnf is there, rename and restore it. 5 ### See https://github.com/mroonga/docker/issues/59 6 [[ -e /etc/my.cnf ]] && mv -n /etc/my.cnf /etc/my.cnf.save 7 8 chown -R mysql. /var/lib/mysql 9 bash /root/postinstall.sh 10 service mysqld start 11 mysql -e "GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" 12 mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql 13 service mysqld stop 14 15 ### Restore my.cnf 16 [[ -e /etc/my.cnf.save ]] && mv /etc/my.cnf.save /etc/my.cnf 17fi 18 19oldowner=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $3}') 20oldgroup=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $4}') 21 22chown -R mysql. /var/lib/mysql 23/usr/sbin/mysqld --user=mysql "$@" 24 25chown -R $oldowner.$oldgroup /var/lib/mysql

上記の設定でbuildを行いました。

PS C:\Docker\Mysql> docker-compose build Building db Step 1/15 : FROM centos:centos6.9 centos6.9: Pulling from library/centos 993c50d47469: Already exists Digest: sha256:48623f1cc1ff287ef4843888bcee22285066adf2d5da6daf000070bee83cd93a Status: Downloaded newer image for centos:centos6.9 ---> e88c611d16a0 Step 2/15 : MAINTAINER groonga ---> Running in 2bcced1f2a82 Removing intermediate container 2bcced1f2a82 ---> 6a8b3793b27d (省略) Step 13/15 : COPY entrypoint.sh /root/entrypoint.sh ---> 79b9820f0b6a Step 14/15 : EXPOSE 3306 ---> Running in 4dee21467386 Removing intermediate container 4dee21467386 ---> 934e3e1567b0 Step 15/15 : ENTRYPOINT ["/root/entrypoint.sh"] ---> Running in 5eb08b8d6109 Removing intermediate container 5eb08b8d6109 ---> 1afe083dfee4 Successfully built 1afe083dfee4 Successfully tagged mysql_db:latest phpmyadmin uses an image, skipping

buildは通りました。

コンテナを起動しました。

PS C:\Docker\Mysql> docker-compose up -d Starting groonga ... done Creating phpmyamin-la ... done

確認したところ

PS C:\Docker\Mysql> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9866db4e93cf phpmyadmin/phpmyadmin:latest "/run.sh supervisord…" 39 seconds ago Up 35 seconds 9000/tcp, 0.0.0.0:8081->80/tcp phpmyamin-la

PHP MyAdminのみコンテナが起動し、Mroongaは起動していませんでした。
MySQLへの接続もできない状態でした。

Dockerを始めて日が浅いため理解していない部分も多々ありますが、ご助言いただけるとありがたいです。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

◆動作環境
・Windows10 Pro 64bit
・Docker Community Edition version 18.06.1-ce-win73(19507)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rock_square

2018/10/26 05:33 編集

よくわかっていないのですが、https://github.com/mroonga/docker は、MySQLも同梱されているのでしょうか? 今 使用している公式イメージのMySQLにアドオンする形ではなく、別に環境を構築する形ですかね。
YouheiSakurai

2018/10/26 05:38

そうです。公式イメージではなくhttps://github.com/mroonga/dockerをベースにすればいいんじゃないかなぁと思ったんです。
rock_square

2018/10/26 05:40

ありがとうございます。試してみたいと思います。
rock_square

2018/10/26 08:12 編集

https://github.com/mroonga/docker/tree/master/Dockerfile/mysql5723_mroonga807 を参考に、Dockerfileやmy.cnfを編集、entrypoint.shを追加し対応してみました。Buildは通ったのですが、コンテナが起動されず(docker-compose up -dでは起動された様に見えたのですが、docker ps で確認したところリストに表示されませんでした)、DBに接続されない、といった状況です。⇒「試したこと」の内容を編集しました。
guest

回答1

0

自己解決

「試したこと」に掲載した内容の「Dockerfile」と「docker-compose.yml」を一部変更することで、対応しました。
下記、「試したこと」に掲載した内容と重複する部分が多いですが、手順として残しておきたいと思います。

公式のMySQLイメージにMroongaをインストールするのではなく、mroonga/docker(https://github.com/mroonga/docker)を使用する方法で対応してみました。

各ファイルを編集しました。
Dockerfileやmy.cnf は
https://github.com/mroonga/docker/blob/master/Dockerfile/mysql5723_mroonga807/Dockerfile
の内容を参考に、内容を変更しました。

Dockerfile

1FROM centos:centos6.9 2MAINTAINER groonga 3 4RUN yum upgrade -y && yum clean all 5RUN yum install -y which && yum clean all 6RUN yum install -y http://packages.groonga.org/centos/groonga-release-1.4.0-1.noarch.rpm && yum clean all 7RUN yum install -y https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm && yum clean all 8RUN yum install --enablerepo=mysql57-community --disablerepo=mysql80-community -y mysql-community-client-5.7.24-1.el6 mysql-community-server-5.7.24-1.el6 && yum clean all 9RUN mysqld --no-defaults --initialize-insecure --basedir=/usr --datadir=/var/lib/mysql --user=mysql 10COPY my.cnf /etc/my.cnf 11RUN chown -R mysql. /var/lib/mysql ; yum install -y mysql57-community-mroonga-8.07 groonga-8.0.7 groonga-tokenizer-mecab-8.0.7 groonga-normalizer-mysql && yum clean all 12RUN chown -R mysql. /var/lib/mysql ; service mysqld start && mysql -e "CREATE USER root@'%'; GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" && mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql && service mysqld stop 13RUN rpm -q --scripts mysql57-community-mroonga | sed -n '/^postinstall scriptlet/,/^[a-z][a-z]* scriptlet/p' | tail -n +2 | head -n -1 > /root/postinstall.sh 14RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log 15COPY entrypoint.sh /root/entrypoint.sh 16 17EXPOSE 3306 18ENTRYPOINT ["/root/entrypoint.sh"]

myCnf

1# For advice on how to change settings please see 2# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html 3 4[mysqld] 5# 6# Remove leading # and set to the amount of RAM for the most important data 7# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. 8# innodb_buffer_pool_size = 128M 9# 10# Remove leading # to turn on a very important data integrity option: logging 11# changes to the binary log between backups. 12# log_bin 13# 14# Remove leading # to set options mainly useful for reporting servers. 15# The server defaults are faster for transactions and fast SELECTs. 16# Adjust sizes as needed, experiment to find the optimal values. 17# join_buffer_size = 128M 18# sort_buffer_size = 2M 19# read_rnd_buffer_size = 2M 20datadir=/var/lib/mysql 21socket=/var/lib/mysql/mysql.sock 22 23# Disabling symbolic-links is recommended to prevent assorted security risks 24symbolic-links=0 25 26log-error=/var/log/mysqld.log 27pid-file=/var/run/mysqld/mysqld.pid 28 29### Added by yoku0825 30character_set_server= utf8mb4 31loose-validate_password = OFF

composeYml

1version: "3" 2services: 3 db: 4 build: ./mysql 5 ports: 6 - 3307:3306 7 environment: 8 MYSQL_ROOT_PASSWORD: root 9 TZ: Asia/Tokyo 10 container_name: "mroonga" 11 phpmyadmin: 12 image: phpmyadmin/phpmyadmin:latest 13 links: 14 - db 15 ports: 16 - 8081:80 17 environment: 18 - PMA_ARBITRARY=1 19 - PMA_HOST=db 20 container_name: "phpmyamin-la"

また、Dockerfileとmy.cnfと同じディレクトリに、 entrypoint.sh を下記内容で配置しました。

entrypointSh

1#!/bin/bash 2 3if [ ! -e /var/lib/mysql/ibdata1 ] ; then 4 ### If overroded my.cnf is there, rename and restore it. 5 ### See https://github.com/mroonga/docker/issues/59 6 [[ -e /etc/my.cnf ]] && mv -n /etc/my.cnf /etc/my.cnf.save 7 rm -r /var/lib/mysql/* 8 mysqld --no-defaults --initialize-insecure --basedir=/usr --datadir=/var/lib/mysql --user=mysql 9 chown -R mysql. /var/lib/mysql 10 bash /root/postinstall.sh 11 service mysqld start 12 mysql -e "CREATE USER root@'%'; GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" 13 mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql 14 service mysqld stop 15 ### Restore my.cnf 16 [[ -e /etc/my.cnf.save ]] && mv /etc/my.cnf.save /etc/my.cnf 17 rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log 18fi 19 20oldowner=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $3}') 21oldgroup=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $4}') 22 23chown -R mysql. /var/lib/mysql 24/usr/sbin/mysqld --user=mysql "$@" 25 26chown -R $oldowner.$oldgroup /var/lib/mysql

上記の設定でbuildを行いました。

PS C:\Docker\Mysql> docker-compose build Building db Step 1/16 : FROM centos:centos6.9 ---> e88c611d16a0 Step 2/16 : MAINTAINER groonga ---> Running in f232f3f6df7a Removing intermediate container f232f3f6df7a ---> b523f7471c27 Step 3/16 : RUN yum upgrade -y && yum clean all ---> Running in a17fa1268a6e Loaded plugins: fastestmirror, ovl Setting up Upgrade Process Resolving Dependencies (省略) Step 13/16 : RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log ---> Running in bf4800b0cb68 Removing intermediate container bf4800b0cb68 ---> 0de24af4281c Step 14/16 : COPY entrypoint.sh /root/entrypoint.sh ---> d1e21bdcb1b7 Step 15/16 : EXPOSE 3306 ---> Running in b2003b7019c1 Removing intermediate container b2003b7019c1 ---> 4ea3f60320fc Step 16/16 : ENTRYPOINT ["/root/entrypoint.sh"] ---> Running in 2c1fdc446326 Removing intermediate container 2c1fdc446326 ---> 1f51cbc32f0c Successfully built 1f51cbc32f0c Successfully tagged mroonga_db:latest

buildは通りました。

コンテナを起動しました。

PS C:\Docker\Mysql> docker-compose up -d Creating network "mroonga_default" with the default driver Creating mroonga ... done Creating phpmyamin-la ... done

確認したところ

PS C:\Docker\Mysql> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4b65d30c843e phpmyadmin/phpmyadmin:latest "/run.sh supervisord…" 6 seconds ago Up 5 seconds 9000/tcp, 0.0.0.0:8081->80/tcp phpmyamin-la 273de3bf557c mroonga_db "/root/entrypoint.sh" 7 seconds ago Up 6 seconds 0.0.0.0:3307->3306/tcp mroonga

MroongaとPHP MyAdminの各コンテナが起動しているのを確認しました。
MySQLへの接続も確認できました。

ひとつ課題としては、docker-compose.ymlからDBのvolumesの項目を削除する必要があったため、データの永続化が実現できていない点です。

投稿2018/10/31 08:23

rock_square

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問