18年運用した
実施した
前提
以下の
OS
cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)
PostgresSQLの
Version psql -V psql (PostgreSQL) 9.6.10
バックアップの 対象と、 バックアップ先
PostgresSQL の
バックアップは
Google Cloud Storage を バックアップ 先に 使用する 理由
バックアップ 先には
使用する
- 5GB まで
無料で 使える。 - 世代管理が
できる。 - Google Drive でも
同様の ことは できそうだが、 システムで 保存する データと 手動で 保存している データの Storage を 分けたかった。
Google Drive に
個人的には
- Googleお役立ち
テクニック - Googleドライブで 「版」を 管理する | マイナビニュース - PostgresSQLの
backup, restore方法まとめ - Google Drive & PostgreSQL Integrations | Zapier
- How to Backup PostgreSQL to Google Drive - PostgreSQL Backup
- Backup Postgres DB to Google Drive
- Backing up Confluence PostgreSQL to Google Drive
バックアップスクリプトを スケジュール実行する
バックアップスクリプトを
スクリプトでは、gsutil
をgsutil
の
gsutil を インストールする
以下をgsutil
を
gsutil を
- gsutil の
取得
curl コマンドで、google cloud sdk を 取得します。 コマンドをcurl https://sdk.cloud.google.com | bash
実行すると ダウンロードが 開始します。
まず、インストール先の ディレクトリを 聞かれます。 デフォルトでは、 実行ユーザーの home
ディレクトリ配下がインストール先に なります。
このまま、エンターを 押しました。 続いて、Downloading Google Cloud SDK install script: https://dl.google.com/dl/cloudsdk/channels/rapid/install_google_cloud_sdk.bash ######################################################################## 100.0% Running install script from: /tmp/tmp.TSbMQDRiEN/install_google_cloud_sdk.bash which curl curl -# -f https://dl.google.com/dl/cloudsdk/channels/rapid/google-cloud-sdk.tar.gz ######################################################################## 100.0% Installation directory (this will create a google-cloud-sdk subdirectory) (/home/xxxxxxxxxxxx):
PATH
にgoogle cloud sdk の コマンドを 追加するか 聞かれます。
y
を選択して、 エンターを 押しました。 Modify profile to update your $PATH and enable shell command completion? Do you want to continue (Y/n)? y
.bashrc
のバックアップが 取得され、 .bashrc
にはgoogle cloud sdk の コマンドの パスが 追加されました。 Enter a path to an rc file to update, or leave blank to use [/home/xxxxxxxxxxxx/.bashrc]: Backing up [/home/xxxxxxxxxxxx/.bashrc] to [/home/xxxxxxxxxxxx/.bashrc.backup]. [/home/xxxxxxxxxxxx/.bashrc] has been updated.
.bashrc
の設定反映の ため シェルスクリプトを 再読み 込みします。 gcloud のexec -l $SHELL
初期化を 実行します。 OAuth 認証のgcloud init
ため ログインを 促されます。 y
を入力して エンターを 押します。 表示されるNetwork diagnostic detects and fixes local network connection issues. Checking network connection...done. Reachability Check passed. Network diagnostic (1/1 checks) passed. You must log in to continue. Would you like to log in (Y/n)? y
URLに ブラウザで アクセスします。
ログイン後に表示される コードを コピーして、 Enter verification code:
の後に ペーストします。 認証がGo to the following link in your browser: https://accounts.google.com/o/oauth2/auth?redirect_uri=........ Enter verification code:
通ると、 対象の プロジェクト番号を 聞かれます。 対象の 番号を 選択して、 エンターを 押します。 You are logged in as: [xxxxxxxxxxxxxx@gmail.com]. Pick cloud project to use: [1] xxxxxxxxxxxxxxxxxxxx [2] xxxxxxxxxxxx [3] Create a new project Please enter numeric choice or text value (must exactly match list
gsutil version
と入力して Version 番号が 表示されれば 上手く インストールが できています。 gsutil version gsutil version: 4.33
スクリプトを 実装、 スケジューリング
Back up postgres db to google cloud storage を
ps-snapshot.sh
#!/bin/bash # Requirements: # - gcloud/gsutil is installed on the box # - gcloud is logged in as a user with write access to Google Cloud Storage # - The file has execution rights so that it can be run in cron # - The Google Cloud Storage bucket already exits # Exit on any error set -e BUCKET='gs://your bucket' JOB_TIMESTAMP=`date +%Y%m%d-%H%M` DATABASE='your database name' DIR='your_backup_dir' GS_UTIL='your gsutil path' cd $DIR NUMBER=`"$GS_UTIL" ls "$BUCKET*.gz" | wc -l` if [ $NUMBER -gt 10 ]; then FILE_NAME=`"$GS_UTIL" ls "$BUCKET*.gz" | head -n 1` "$GS_UTIL" rm -f "$FILE_NAME" else : fi /usr/bin/pg_dump -w $DATABASE > $JOB_TIMESTAMP-pad.sql /bin/tar -cvzf $JOB_TIMESTAMP.tar.gz $JOB_TIMESTAMP-pad.sql "$GS_UTIL" cp $JOB_TIMESTAMP.tar.gz "$BUCKET" rm -f $JOB_TIMESTAMP-pad.sql $JOB_TIMESTAMP.tar.gz
説明
バックアップは
10 まで 取得する。
if [ $NUMBER -gt 10 ]; then
あたりで、バックアップの 取得数が 10を 超える 場合削除しています。 pg_dump は
-w
オプションをつけて 実行する。
DB ユーザと実行ユーザが 異なり pg_dmp
を実行する 際 パスワード入力を 求められたので .pgpass
を作成し、 -w
オプションを付与し、 パスワード入力を 求められないようにしました。 Google Cloud Storage には、
世代管理を 行う 機能が あります。 オブジェクトの バージョニング | Cloud Storage | Google Cloud この 機能を 活用すると、 世代管理を 自前で 行う 必要は ないのかもしれません。 GS_UTIL
には、gsutil
のインストールパスを 記載してください。 私が インストールを 実施した 際は インストールユーザーの home ディレクトリ直下を 選択したので、 その パスを 記載しました。
crotab の
設定
以下のようにcrontab を 設定しました。
毎日午前4時に バックアップを 取得します。 00 04 * * * /bin/sh /home/xxxxxxxxx/scripts/ps-snapshot.sh >> /var/log/jobs/ps-snapshot.log 2>&1
参考
以下、
以上です。
コメント