見出し画像

【PSQL (v.12.4)】PostgreSQLで論理バックアップからリストアまで(shell command使います)

はじめに

今回毎朝8時にデータベースのバックアップを作成する、shellコマンドを作成していきます。
バックアップの拡張子は .sql として 保存時には .tar.gz に圧縮します。

・バックアップの保存先は /var/backup とします
・shellコマンドは var/lib/pgsql/backup_sh/ に置きます

《環境》
Linux
PostgreSQL 12.4
《事前準備》
・バックアップする対象のDBがある(リストア先はこのnote内で作ります)
・そのデータベースにデータが入っている状態

最終的な構造はこうなります(僕のやり方の場合)

/var/backup
|-- hoge-20201010-080001.sql
|-- hoge-20201011-080001.sql
`-- hoge-20201012-080001.sql

//ここはcrontabで時間をしてして実行させる
/var/lib/pgsql/backup_sh
`-- pg_backup.sh

やり方

まずディレクトリの作成(既にある人はここをとばしてください)

// ここにバックアップファイルが蓄積されていきます
mkdir /var/backup

次にpostgresユーザーでpostgresに入ります。

// postgresに入る
su postgres

// ディレクトリ作成
cd /var/lib/pgsql
mkdir backup_sh

// shellコマンドを作成
vi pg_backup.sh
pg_backup.sh内

#!/bin/bash

# 日付
DATE=`date '+%Y%m%d-%H%M%S'`

# ファイルを保存するPATH
SAVEPATH='/var/backup/'

# 保存するファイルに名前を付ける
PREFIX='hoge-'

# 拡張子の指定
EXT='.sql'

# アクセスに必要な情報
USER='hogehoge'
DBNAME='test'

# パスワード入力が必要な際はこれを記載
export PGPASSWORD=hogehoge

# バックアップ実行コマンド
cd /var/lib/pgsql/backup
/usr/bin/pg_dump -h ホスト名 -U $USER -p 5432 $DBNAME > $PREFIX$DATE$EXT

# tarに圧縮
tar --remove-files -P -zcvf $SAVEPATH$PREFIX$DATE$EXT.tar.gz $PREFIX$DATE$EXT

上記の場合だと実行コマンドは

/usr/bin/pg_dump -h ホスト名 -U hogehoge -p 5432 test > hoge-202010010801.sql

になります。

シェルスクリプトが実行できるように実行権限付与

このままだと単体で実行できないので

chmod u+x /var/lib/pgsql/backup_sh/pg_backup.sh

次は定期的に実行されるように設定していきます。

crontab -e
crontab内

// 毎朝8時に実行する場合
00  8  *  *  * /var/backup_sh/pg_backup.sh

// 5分おきに実行する場合
*/5 *  *  *  * /var/backup_sh/pg_backup.sh

これでバックアップの準備は完了です。

DBを作成して、リストア

// PostgreSQLに入る
psql -U postgres

// DB作成
CREATE DATABASE db名 OWNER role名;

// 出る
\q

リストアをしていく

先ほど作成したDB名を dbtest とした場合

cd /var/backup

ls -al
postgres postgres  690862 Sep 16 08:00  hoge-20201016-080001.sql.tar.gz
// こんな感じでファイルサイズもあり、バックアップが無事に取れていることを確認。


// tar.gz 解凍
tar -zxvf file名

ls-al
postgres postgres 1041479 Oct 16 08:00 hoge-20201016-080001.sql
// ファイルサイズが大きくなっているのを確認。無事に解凍できている

// リストア
psql リストア先のdb名 < file名

// リストア(今回の場合)
psql dbtest < hoge-20201016-080001.sql

無事に実行されれば完了。

この記事が気に入ったらサポートをしてみませんか?