概要
Docker使えばPostgreSQLの設定ファイル変えずとも、
簡単に同一サーバ内の2つのPostgreSQLを同期させることができたのでそのときのメモ書き。
前準備
Docker Composeがインストール済みであること
手順
1.コンテナにPostgreSQLを2つ用意
マスタDB(ポート番号5432)とスレーブDB(ポート番号5433)として起動
ポート番号5432と5433で動くPostgreSQLを用意
sudo docker run -d --name=master-postgres -p 5432:5432 -e POSTGRES_PASSWORD=password postgres
sudo docker run -d --name=slave-postgres -p 5433:5432 -e POSTGRES_PASSWORD=password postgres
2.同期用のシェル作成
マスタDBのダウンプファイル作成してスレーブDBに設定するシェル作成。
restore.sh
# --基本情報--
# Dumpファイル名
BACKUP_FILENAME="backup.dump"
# リストア対象のDB
DB_NAME="postgres"
# 操作ユーザ
DB_USER="postgres"
# 対象のDocker_DB
MASTER_DB="master-postgres"
SLAVE_DB="slave-postgres"
# -------
# Dumpファイル作成
docker exec $MASTER_DB pg_dump -U $DB_USER --clean --if-exists $DB_NAME > $BACKUP_FILENAME
# リストア
cat $BACKUP_FILENAME | docker exec -i $SLAVE_DB psql -U $DB_USER
3.あとはクーロン設定
例は、5分毎にスレーブDB(ポート番号5433)に同期させるクーロン
クーロンの設定例(5分毎に同期)
*/5 * * * * /opt/sh/restore.sh
4.確認
マスタDBの内容がスレーブDBに同期されているのを確認