【PostgreSQL】【シェルスクリプト】PostgreSQLのバックアップスクリプト

今回は PosgreSQL のバックアップスクリプトを作成して CRON で定期バックアップを取得する手順について解説します。

 

基本的な PostgreSQL の操作方法に関しては以下の記事を参考にしてください。

 

【PostgreSQL】【CentOS7】yum コマンドでインストール&初期設定(ユーザー作成、パスワード設定、データベース作成、権限割り当て)手順

 

 

 

PostgreSQLのバージョン

今回バックアップを取得する PostgreSQL のバージョンは以下です。

PostgreSQL:9.2.23

[root@SAKURA_VPS conf]# psql --version
psql (PostgreSQL) 9.2.23
[root@SAKURA_VPS conf]#

 

 

 

 

バックアップは pg_dump コマンドで取得する

データベースを運用している最中でもデータベースのバックアップを取得することが出来るコマンドです。

[root@SAKURA_VPS conf]# which pg_dump
/bin/pg_dump
[root@SAKURA_VPS conf]#

 

 

 

pg_dump コマンドのオプション

-C, --create オプション

Begin the output with a command to create the database itself and reconnect to the created database. (With a script of this form, it doesn't matter which database in the destination installation you connect to before running the script.)

If --clean is also specified, the script drops and recreates the target database before reconnecting to it.

This option is only meaningful for the plain-text format. For the archive formats, you can specify the option when you call pg_restore.

-C オプションを付けると、dump を取得する際に、dump データをリストアする時にデータベース自体を作成し、作成したデータベースに再接続するコマンドが dump データに入ります。(表現が難しいですが。。)

--cleanも指定されている場合、スクリプトは再接続する前にターゲットデータベースを削除して再作成します。

このオプションは、プレーンテキスト形式でのみ意味があります。

 

-E encoding, --encoding=encoding オプション

指定した文字セット符号化方式でダンプを作成します。

デフォルトではダンプはデータベースの符号化方式で作成されます。 

【例】

-E UTF8

 

 

--disable-dollar-quoting オプション

 

このオプションは、関数本体用のドル引用符の使用を無効にし、強制的に標準 SQL の文字列構文を使用した引用符付けを行います。

 

 

-F format --format=format オプション

出力形式を選択します。 formatには以下のいずれかを取ることができます。

p, plain

平文のSQLスクリプトファイルを出力します(デフォルト)。

【例】

--format=plain

 

 

 

 

 

作成した PostgreSQL バックアップスクリプト

以下が今回作成した PostgreSQL データベース バックアップ シェルスクリプトです。

-bash-4.2$ vi postgresql_backup.sh 
#!/bin/bash 
 
# 変数の定義 
DATE=`date +%Y%m%d_%H%M%S` 
LOGFILE="/home/backup/logs/postgres_backup_${DATE}.log" 
BACKUP_DB="posgres" 
 
# バックアップ開始ログ 
echo "`date +%Y%m%d_%H%M%S`: PostgreSQL データベースバックアップ開始" >> ${LOGFILE} 
# バックアップコマンド 
/bin/pg_dump --create --encoding=UTF8 --disable-dollar-quoting --format=plain ${TARGET_DB} -f /home/backup/${BACKUP_DB}_${DATE}.sql 
 

# コマンド終了ステータスのチェック
if [ "${?}" -eq 0 ] ; 
then 

   # gzip コマンドでデータを圧縮する
   gzip /home/backup/${BACKUP_DB}_${DATE}.sql 
   # gzip コマンドの終了ステータスのチェック
   if [ "${?}" -eq 0 ] ; 
   then 
     echo "`date +%Y%m%d_%H%M%S`: ${BACKUP_DB} ダンプファイル gzip 圧縮完了" >> ${LOGFILE} 
   else 
     echo "`date +%Y%m%d_%H%M%S`: ${BACKUP_DB} ダンプファイル gzip 圧縮失敗" >> ${LOGFILE} 
   fi 
else 
   echo "`date +%Y%m%d_%H%M%S`: ${BACKUP_DB} PostgreSQL データベースバックアップ失敗" >> ${LOGFILE} 
fi 
 
 
# 過去のバックアップとログファイルを削除 
echo "`date +%Y%m%d_%H%M%S`: 過去のダンプ削除開始" >> ${LOGFILE} 
find /home/backup/ -mtime +1 -name "*.sql.gz" -delete 
find /home/backup/logs -mtime +4 -name "*.log" -delete 
echo "`date +%Y%m%d_%H%M%S`: 過去のダンプ削除完了" >> ${LOGFILE} 
 
exit 0

 

 

CRON の設定

上記のスクリプトを CRON で毎日0時(24時)に実行します。

-bash-4.2$ crontab -l

# 毎日24時に PostgreSQL データベースをバックアップする
00 00 * * * /var/lib/pgsql/data/postgresql_backup.sh
-bash-4.2$

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人