Docker を利用し mysqldump のみを実行するサーバを構築

Docker を利用し mysqldump のみを実行するサーバを構築

Docker

Docker の登場によりインフラ環境はガラッと変わりました。
以前であれば汎用サーバを保持しており何かの作業をしたいときにそのサーバで実行していましたが、 Linux やインストールしているツールのバージョンによっては処理することが難しいことも頻繁にありました。
しかし、 Docker を用いれば作業に適した環境を手軽に構築することができ、一つの処理専用のサーバを用意することも簡単です。

mysqldump

今回紹介するのは、 mysqldump だけを実行するサーバの構築です。
mysqldump は MySQL のデータを出力することに用いられますが、 MySQL のバージョンが異なると実行できないことがあります。具体的には、 Ubuntu 20.04 でインストールできる mysql-client は 8.0 です。これで古いバージョンの MySQL にアクセスしようとするとエラーで処理することができません。ごにょごにょすれば Ubuntu 20.04 にも mysql-client-5.7 をインストールすることもできるのですが、 Ubuntu 18.04 を用いれば、面倒な作業も必要ありません。
そこで今回は、 Docker を用い Ubuntu 18.04 に mysql-client-5.7 をインストールし mysqldump するサーバ構築を紹介します。またせっかく Docker を用いるので、サーバを立ち上げたら mysqldump だけを実行し、またサーバを停止するような形にしましょう。

環境:
 Windows11
 Docker Desktop

ファイルの準備

今回はサーバを構築するための Dockerfile と、シェルを実行するための dump.sh ファイルを用意します。また mysqldump により出力されるファイルが home フォルダに配置されるようにします。そのため、作業フォルダは次のようになります。



Dockerfile は次のような内容になっています。
FROM ubuntu:18.04

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo

RUN apt update \
&& apt install -y mysql-client \
&& apt install -y tzdata

COPY dump.sh /root

CMD /root/dump.sh

最初にお伝えしたように、手軽に mysql-client-5.7 をインストールできる Ubuntu18.04 をベースとし、 mysql-client をインストールしています。
3, 4行目は mysqldump に直接関係ないのですが、出力するファイル名の末尾に日時を入れたいので、tzdata インストール時の対応を行っています。
7行目で mysql-client を、8行目でtzdata をインストールしています。
10行目で実行したいシェルをコピーしておき、12行目で起動時に実行するコマンドを設定しました。

実行する dump.sh は、
mysqldump -u***user*** -p***pass*** -h ***host*** --set-gtid-purged=OFF ***db_name*** > /home/dump_`date "+%Y%m%d_%H%M%S"`.sql

mysqldump を実行し、 home ディレクトリに dump のファイルを出力します。user, pass, host, db_name などは適切に変更してください。

Dockerで実行

準備が整ったので実際に起動してみましょう。
起動するコマンドは次の通りです。

docker build -t mysqldump .


これでイメージが作成されました。

次にコンテナを作成しましょう。
docker run -dit --name dump -v /c/Users/(***path***)/home:/home mysqldump



上記コマンドだと、コンテナ立ち上げと同時に処理が実行されます。そのため home ディレクトリに dump ファイルが作成されます。
実行後はコンテナが停止するので、次回以降は再生ボタンを押すだけで mysqldump が実行されます。


まとめ

今回は Docker を用いで mysqldump だけを実行するサーバ構築を紹介しました。
一度作成してしまえば、あとはクリック一つで実行できるようになるのでとても楽です。また環境が変わっても、フォルダのパスなどを変えるだけで問題ないです。
Docker をガンガン活用して楽しましょう。
» エンジニア登録はこちら