2023/09/26更新 Ubuntu Server 22.04 LTS / PostgreSQL 15
動機
pg_rmanでオンラインバックアップを取りたいのにweb上で見かけたライブラリをインストールしてもPostgreSQL15だと上手く動かなかったので、その辺成功したメモ
Dockerfileの作成
Miskkeyで使うDBのDockerfile(イメージにはpostgres:15-bookwormを使用)に以下を追加
実際には前回のPGroonga導入で作成したDockerfileに追記しています
スクリプトはDockerfileと同じフォルダに作成
Dockerfile
Tiniを入れてPostgreSQLのDocker内のPIDが1にならないようにします。リストアするときにPostgreSQLを停止しないと行けないのですが、PIDが1になっているとPostgrSQLの停止=Dockerコンテナ自体が停止してしまうためです。
# Add Tini ENV TINI_VERSION v0.19.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini RUN chmod +x /tini ENTRYPOINT ["/tini", "--"] # pg_rman install RUN apt update RUN apt install -y build-essential libpq-dev git zlib1g-dev RUN apt-get update RUN apt-get -y install postgresql-client-15 postgresql-15 postgresql-server-dev-15 libpq-dev RUN apt-get -y install libpq-dev libselinux1-dev liblz4-dev libpam0g-dev libkrb5-dev libreadline-dev libzstd-dev RUN git clone https://github.com/ossc-db/pg_rman.git /tmp/pg_rman && \ cd /tmp/pg_rman && \ make && make install && \ rm -rf /tmp/pg_rman CMD ["docker-entrypoint.sh", "postgres"]
backup_script.sh
#!/bin/bash BACKUP_DIR="/var/lib/postgresql/backup" DB_DIR="/var/lib/postgresql/data" ARCHIVE_DIR="/var/lib/postgresql/archive" MODE="$1" /usr/pgsql-15/bin/pg_rman backup --backup-mode=$MODE -b $BACKUP_DIR -D $DB_DIR -A $ARCHIVE_DIR
cronでバックアップを定時実行しています