PGSQL のスケジュールされたリモート完全データベース バックアップ戦略
1.容器を準備する
リモート pg ライブラリに接続するための postgres コンテナ イメージを準備する
サンプル起動スクリプト
docker run -d --restart always --name postgres -p 5432:5432 -v /etc/localtime:/etc/localtime:ro -e POSTGRES_PASSWORD=123456-v /data/pg:/var/lib/postgresql/data mdillon/postgis:latest
ここでは、/data/pg ディレクトリを pgsql のデータ ディレクトリ領域にマウントしたことがわかります。
2. プロファイル環境変数を準備する
例:
上記はすべてデフォルトですが、ポイントはリモートでログインする必要がある pg ライブラリのパスワードを PGPASSWORD に入力することです。
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
if [ "${PS1-}" ]; then
if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
export PGPASSWORD='123456'
サーバーの /data/pgfile ディレクトリにプロファイル ファイルを作成し、上記のファイルの内容を貼り付けます。
docker cp コマンドを実行して、プロファイル環境構成をコンテナーにコピーします。
例: docker cp ローカル ディレクトリ コンテナ名: コンテナ ディレクトリ
docker cp /data/pgfile/profile postgres:/etc
環境変数がコンテナー ディレクトリにコピーされた後、コンテナーに入って表示できるようになります。
ここで、コンテナの /etc/profile が置き換えられたことがわかります。
次に、コンテナ内のソース /etc/profile を使用します
注文の実行
psql 172.19.52.5 -U postgres -p 5432 -d postgres
データベースへのリモート接続が成功していることがわかります。
3.backup.sh バックアップ スクリプトを準備します。
例:
#!/bin/bash
# 数据库信息
DB_HOST=172.19.52.5
DB_PORT=5432
DB_USER=postgres
DB_NAME=ry-cloud
#文备份文件夹目录
BACKUP_DIR=/var/lib/postgresql/data/backup
#备份文件名称
BACKUP_FILE=$BACKUP_DIR/ry-cloud-$(date +%Y%m%d%H%M%S).sql.gz
pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME | gzip >$BACKUP_FILE
#查找1天前的数据 删除
find $BACKUP_DIR -type f -name "*.gz" -mtime +1 -exec rm {
} \;
/data/pg ディレクトリの下に mysh フォルダを作成します。 mysh フォルダの下に、backup.sh スクリプト ファイルを作成します。
/data/pg ディレクトリの下に、バックアップ データを保存するためのバックアップ フォルダーを作成します。
/data/pgに対応するコンテナマッピングディレクトリは/var/lib/postgresql/dataなので
したがって、/mysh/backup.sh はコンテナの /var/lib/postgresql/data ディレクトリに表示されます。
4. スクリプトテストを実行する
出口コンテナ
コマンドを実行してbackup.shが正常に実行できるか確認する
docker exec postgres bash -c "source /etc/profile && /var/lib/postgresql/data/mysh/backup.sh"
コマンドを実行すると、/data/pg/backup ディレクトリにバックアップ ファイルがあることがわかります。これは、pg_dump からのデータベース圧縮パッケージ全体です。
5.Linux crontab タスクのタイミング実行を設定する
crontab -e を使用してスケジュールされたタスクを編集し、以下のバックアップ コマンドを追加すれば完了です
コマンドを使用して crontab タイミング タスクを編集する
crontab -e
毎日午前2時にバックアップコマンドを実行します。
0 2 * * * sudo docker exec postgres bash -c "source /etc/profile && /var/lib/postgresql/data/mysh/backup.sh" >> /data/pg/mysh/my.log 2>&1
6. まとめ
1. コンテナの関連マッピング パスに注意します。
2. Docker コンテナの pgsql バージョンは、リモート サーバーのバージョンと一致している必要があります。
3. 最後のスクリプトはコンテナ内で実行されるため、backup.sh 内のバックアップ ディレクトリ アドレスはコンテナのディレクトリ アドレスであることに注意してください。
4. 他のコマンドは無効になっているため、backup.shのパラメータ設定とprofileのpgライブラリのパスワード設定に注意してください