【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$

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください