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 をガンガン活用して楽しましょう。