コンテナで実行しているDBのバックアップ方法

コンテナでサービスを実行しているときにDBのバックアップ方法は色々とあると思いますが、比較的お手軽にできる方法を一つご紹介。

考え方は、
① docker でコンテナ起動時にホストのディレクトリをボリュームマウントしておく
② ホスト側で、docker exec する .sh ファイルを用意する
③ ホスト側で cron で定期的に .sh を実行する
となります。

① docker でコンテナ起動時にボリュームマウント

docker-compose.yml は以下のようなイメージ。
volumes で コンテナ内の /backup を ホストの /home/backup と連携させています。

version: '3'

services:
  db:
    image: postgresxxx
    environment:
      - POSTGRES_USER=hoge
      - POSTGRES_PASSWORD=figa
      - POSTGRES_DB=data-name
    user: "hogehoge"
    volumes:
      - /home/backup: /backup
    container_name: postgres-db
   :

② シェル( .sh )の作成

ホスト側に用意するシェルファイルは、以下のイメージ。
docker exec でコンテナに入り、DB の backup を実行する。ここで、ホスト側のディレクトリにバックアップされたファイルが生成される。
バックアップ後は、毎日の実行を想定して、7日より古いファイルを削除していく。

#!/bin/bash

DATE=`date "+%Y%m%d"`

# /backup はコンテナ内のパス。ホスト側は、~/backup になる
docker exec postgres-db /bin/bash -c "pg_dump -U hogehoge -h localhost -Fc data-name > /backup/db_$DATE.dump"

# 7日より古いファイルを削除
find /home/backup -type f -name "db_*.dump" -mtime +7 -exec rm -f {} \;

③ ホストで cron 設定

ホスト側で、②のシェルが毎日実行されるように cron を設定してください。
cron設定については、こちら をご確認ください。

Xserver が お友達紹介割引 で申込みが可能になります。 HISモバイル

コメント

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