MySQL入門:DockerでMySQL環境を構築する -MySQLTuner-

スポンサーリンク
MySQL入門:DockerでMySQL環境を構築する -MySQLTuner- 環境構築
MySQL入門:DockerでMySQL環境を構築する -MySQLTuner-
この記事は約11分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、DockerでMySQLの開発環境を構築する方法についてご紹介します。

スポンサーリンク

背景

MySQLの開発環境をDockerで構築する機会があったので、そのときの内容を備忘として残しています。

この記事のベースとなっている環境については、下記の記事を御覧ください。

MySQLTunerとは

MySQLTunerは、Perlで書かれたスクリプトで、MySQL (MariaDB) のパフォーマンスと安定性を高めるためのチューニングについてのポイントを表示してくれます。

MySQLTunerを使用すると、以下のことができます:

  • MySQL (MariaDB) の設定を最適化するための推奨事項を提供します。
  • パフォーマンスの向上や安定性の確保に役立つアドバイスを表示します。
  1. MySQLTunerはさまざまな項目についての推奨事項を表示します。例えば:
    • ストレージエンジンの統計
    • セキュリティの推奨事項
    • パフォーマンス指標
    • MyISAM指標
    • InnoDB指標
    • AriaDB指標
    • レプリケーション指標
  2. 推奨事項に基づいて、MariaDBの設定ファイルを変更することで、パフォーマンスを向上させることができます。例えば、スロークエリをログに出力したり、各種変数を調整したりすることができます。

MySQLTunerは、データベースの健康診断やチューニングに役立つツールであり、MariaDBの運用を改善するために活用できます。

ファイル一覧

下記のファイルを作成、修正します。ファイルの内容は次のセクションに記載しています。

        modified:   Makefile
        modified:   compose.yml
        new file:   mysql_tuner/Dockerfile

mysql_tuner/Dockerfile

FROM ubuntu:18.04

RUN apt-get update \
 && apt-get install -yq --no-install-recommends \
        apt-utils \
        curl \
        wget \
        perl \
        perl-doc \
        mysql-client \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

# Installing MySQL Tuner
RUN set -eux \
    && echo "Downloading MySQL Tuner script ..." \
    && wget --no-check-certificate https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl -O /mysqltuner.pl \
    && wget --no-check-certificate https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O /basic_passwords.txt \
    && wget --no-check-certificate https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O /vulnerabilities.csv

ENTRYPOINT ["sh", "-c", "perl mysqltuner.pl --host ${MYSQL_HOST} --user ${MYSQL_USER} --pass ${MYSQL_PASS}"]

このDockerfileは、Ubuntu 18.04のベースイメージを使用しています。以下にコードの詳細を解説します。

  1. RUN apt-get update ...: この行は、Ubuntuパッケージマネージャーを使用してパッケージリストを更新しています。apt-get updateは、新しいパッケージの利用可能性を確認し、システムを最新の状態に保ちます。
  2. RUN apt-get install -yq ...: この行は、必要なパッケージをインストールしています。具体的には、apt-utilscurlwgetperlperl-doc、およびmysql-clientがインストールされます。-yqオプションは、対話型のプロンプトを無効にし、静かなモードで実行することを意味します。
  3. RUN apt-get clean ...: この行は、インストール時に生成されたキャッシュや一時ファイルをクリーンアップしてディスクスペースを解放します。
  4. RUN rm -rf /var/lib/apt/lists/*: この行は、apt-get updateで生成されたパッケージリストのキャッシュを削除して、ディスクスペースをさらに解放します。
  5. RUN set -eux ...: この行は、シェルスクリプトのエラーハンドリングを設定しています。-eオプションは、エラーが発生した場合にスクリプトを終了することを意味し、-uオプションは未定義の変数を使用した場合にエラーを出すことを意味します。
  6. MySQL Tunerのインストール:
    • wgetコマンドを使用して、MySQL Tunerスクリプトと関連ファイルをダウンロードしています。
    • --no-check-certificateオプションは、SSL証明書のチェックを無効にしています。
    • ダウンロードされたファイルはそれぞれ/mysqltuner.pl/basic_passwords.txt、および/vulnerabilities.csvに保存されます。
  7. ENTRYPOINT ["sh", "-c", "perl mysqltuner.pl ..."]: この行は、コンテナが起動されたときに実行されるコマンドを指定しています。具体的には、perl mysqltuner.plスクリプトを実行して、MySQL Tunerを起動しています。--host--user、および--passオプションは、MySQLホスト、ユーザー、およびパスワードを指定します。

MySQL Tunerは、MySQLおよびMariaDBのパフォーマンスチューニングに役立つツールであり、診断結果に基づいて設定の改善を提案します。

compose.yml

緑のセンテンスを追加します。

+  mysql_tuner:
+    build: ./mysql_tuner
+    container_name: mysql_tuner
+    environment:
+      MYSQL_HOST: mysql_server
+      MYSQL_USER: root
+      MYSQL_PASS: P@ssw0rd
+    networks:
+      - net
+    profiles:
+      - tools

このコードはDocker Composeの設定ファイルで、MySQL TunerをDockerコンテナとして実行するためのものです。以下にコードの詳細を解説します。

  1. mysql_tuner:: これはサービスの名前です。Docker Composeでは、各サービスは名前で識別されます。
  2. build: ./mysql_tuner: この行は、カレントディレクトリ内の./mysql_tunerディレクトリからイメージをビルドすることを指定しています。Dockerfileが存在するディレクトリを指定することで、Dockerイメージをビルドします。
  3. container_name: mysql_tuner: この行は、コンテナの名前を指定しています。この場合、コンテナの名前はmysql_tunerです。
  4. environment:: このセクションは、環境変数を設定しています。MySQL Tunerコンテナが実行される際に、以下の環境変数が使用されます:
    • MYSQL_HOST: MySQLサーバーのホスト名またはIPアドレス(ここではmysql_serverとして指定されています)。
    • MYSQL_USER: MySQLのユーザー名(ここではrootとして指定されています)。
    • MYSQL_PASS: MySQLのパスワード(ここではP@ssw0rdとして指定されています)。
  5. networks:: このセクションは、コンテナが所属するネットワークを指定しています。- netは、名前がnetのネットワークにコンテナを接続することを意味します。
  6. profiles:: このセクションは、Docker Composeのプロファイルを指定しています。プロファイルは、特定の環境や設定に対してサービスをグループ化するために使用されます。ここではtoolsプロファイルにコンテナを追加しています。

簡潔に言えば、このDocker ComposeファイルはMySQL Tunerを実行するための設定を定義しており、MySQLサーバーへの接続情報とネットワークの設定を指定しています。

Makefile

+# mysql_tunerの実行
+.PHONY: run_mysql_tuner
+run_mysql_tuner:
+       cd $(WOKR_DIR) \
+       && docker compose --profile tools run -it mysql_tuner

このMakefileのセクションは、mysql_tunerコンテナを実行するためのターゲットを定義しています。以下に詳細を解説します。

  1. # mysql_tunerの実行: このコメントは、このターゲットがMySQL Tunerコンテナの実行に関連していることを示しています。
  2. .PHONY: run_mysql_tuner: .PHONYは、makeに対して仮想的なターゲットであることを伝えます。run_mysql_tunerは、このターゲットの名前です。
  3. run_mysql_tuner:: この行は、run_mysql_tunerターゲットの定義を開始しています。
  4. cd $(WOKR_DIR): この行は、指定されたディレクトリに移動することを意味します。$(WOKR_DIR)は、環境変数として定義されているディレクトリパスです。
  5. && docker compose --profile tools run -it mysql_tuner mysql_tuner: この行は、Docker Composeを使用してMySQL Tunerコンテナを実行しています。
    • --profile toolsは、toolsプロファイルを使用してコンテナを実行することを指定しています。
    • -itオプションは、対話型モードでコンテナを実行することを意味します。
    • mysql_tunerは、実行するコンテナの名前です。

このMakefileは、MySQL Tunerコンテナを起動するための便利な方法を提供しています 。

動作確認

下記のコマンドを実行します。

make build
make up
make run_mysql_tuner

下記のような結果が出力されていれば成功です。

-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
    11 CVE(s) found for your MySQL release. Consider upgrading your version !
    MySQL was started within the last 24 hours: recommendations may be inaccurate
    Reduce your overall MySQL memory footprint for system stability
    Dedicate this server to your database for highest performance.
    Reduce or eliminate unclosed connections and network issues
    We will suggest raising the 'join_buffer_size' until JOINs not using indexes are found.
             See https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_join_buffer_size
    Be careful, increasing innodb_redo_log_capacity means higher crash recovery mean time
Variables to adjust:
  *** MySQL's maximum memory usage is dangerously high ***
  *** Add RAM before increasing MySQL buffer variables ***
    join_buffer_size (> 256.0K, or always use indexes with JOINs)
    innodb_redo_log_capacity should be (=32M) if possible, so InnoDB Redo log Capacity equals 25% of buffer pool size.

おわりに

今日は、DockerでMySQLの開発環境を構築する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました