【PostgreSQL】PostgreSQL のバックアップ手順とリストア手順【Part.6】

今回 PostgreSQL のバックアップおよびリストア手順について解説します。

 

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

 

 

 

pg_dumpall コマンド

pg_dumpall コマンドは特定のデータベースを指定してバックアップを取得することはできません。

すべてのデータベースが対象としなります。

 

 

データベースリストア事前準備

バックアップを「pg_dump」コマンドで取得し「xxxx.sql」ファイルで作成された前提で解説します。

事前に、思いもよらない処理が実行されないように CRON を停止します。

 

■/etc/crontab ファイルの確認及び修正

# vi /etc/crontab

 

 

■/var/spool/cron ディレクトリの確認

# cd /var/spool/cron

# ls

 

 

ストレージからバックアップファイルの転送

バックアップファイル(xxxx.sql)をバックアップストレージから対象のサーバに転送します。

データベースのバックアップファイルは膨大なサイズであることが多いので、ネットワーク帯域幅を絞れる rsync コマンドを使用します。

 

【rsync コマンド例】

# rsync -arvP --bwlimit=62500 test@192.168.1.10:/mnt/backup/TestDb01_2018xxxx.sql.gz /psql/data

 

 

 

PostgreSQL データベースの初期化

事前準備をします。

 

環境変数の確認

環境変数を確認します。

-bash-4.1$ cd ~

-bash-4.1$ cat .bash_profile
[ -f /etc/profile ] && source /etc/profile
PGDATA=/psql/data ← この「/psql/data」ディレクトリが PostgreSQL のデータベースクラスタのディレクトリとなります。
export PGDATA
-bash-4.1$

 

 

データベースクラスタのリネーム【必要なら】

必要なら既存のデータベースクラスタ「/psql/data」をリネームします。

# mv /psql/data /psql/data_2018xxxx

 

 

initdb コマンドの実行

initdb コマンドを実行してデータベースを初期化します。

 

【デバッグモードで初期化する場合】

-bash-4.1$ /usr/pgsql-9.3/bin/initdb --pgdata=/psql/data --encoding=UTF8 --no-locale --debug

 

【通常モードで初期化する場合】

-bash-4.1$ /usr/pgsql-9.3/bin/initdb --pgdata=/data --encoding=UTF8 --no-locale

※初期化がうまくいかない場合はデバッグモードで初期化するとエラーの原因が特定できる可能性があります。

 

 

【initdb コマンドのヘルプ】

# initdb --help 
initdbはPostgreSQLデータベースクラスタを初期化します。 
使用方法: 
initdb [OPTION]... [DATADIR] 
 
オプション: 
-A, --auth=METHOD    ローカルな接続向けのデフォルトの認証方式です 
--auth-host=METHOD    ローカルなTCP/IP接続向けのデフォルトの認証方式です 
--auth-host=METHOD    ローカルソケット接続向けのデフォルトの認証方式です 
[-D, --pgdata=]DATADIR  データベースクラスタの場所です 
-E, --encoding=ENCODING 新規データベース用のデフォルトの符号化方式です 
--locale=LOCALE     新しいデータベースのデフォルトロケールをセット 
--lc-collate, --lc-ctype, --lc-messages=ロケール名 
--lc-monetary, --lc-numeric, --lc-time=ロケール名 
新しいデータベースに対応するカテゴリに対する 
デフォルトロケールをセット(デフォルト値は 
環境変数から選ばれます) 
--no-locale --locale=C と同じです 
--pwfile=ファイル名 新しいスーパーユーザのパスワードをファイルから読み込む 
-T, --text-search-config=CFG\ 
デフォルトのテキスト検索設定です 
-U, --username=NAME データベーススーパーユーザの名前です 
-W, --pwprompt 新規スーパーユーザに対してパスワード入力を促します 
-X, --xlogdir=XLOGDIR トランザクションログディレクトリの場所です 
 
使用頻度の低いオプション: 
-d, --debug 多くのデバッグ用の出力を生成します 
-k, --data-checksums データページのチェックサムを使用します 
-L DIRECTORY 入力ファイルの場所を指定します 
-n, --noclean エラー発生後の削除を行いません 
-N, --nosync 変更の安全なディスクへの書き出しを待機しません 
-s, --show 内部設定を表示します 
-S, --sync-only データディレクトリのsyncのみを実行します 
 
その他のオプション: 
-V, --version バージョン情報を表示し、終了します 
-?, --help このヘルプを表示し、終了します 
 
データディレクトリが指定されない場合、PGDATA環境変数が使用されます。 
 
不具合は<pgsql-bugs@postgresql.org>まで報告してください。 
[root@posmgr-db02-test bin]# 

 

 

リストアの実行

事前にリストアをするデータベースを作成しておきます。

$ psql <対象のデータベース> < <リストアするファイル>

 

【例】

$ psql TestDb01 < TestDb01_20181125.sql

 

 

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

 

リストア実行手順

具体的なリストアの実行手順を参考例として記載します。

 

圧縮している「.sql」ファイルを解凍します。

$ gunzip TestDb01_20181125.sql.gz

 

必要に応じて旧データベースを削除します。

※リストア先の情報が残っている場合は、先に削除する必要があります。

postgres アカウントにスイッチします。

# su - postgres

 

対象のデータベース(例では TestDb01)を削除します。

$ dropdb TestDb01

 

データベースを作成します。

-bash-4.1$ psql -U postgres
psql (9.3.4)
"help" でヘルプを表示します.

 

postgres=# create database TestDb01;
CREATE DATABASE

 

postgres=#
postgres=# \q
-bash-4.1$

 

DB バックアップファイルの「.sql」ファイルを取り込ります。

$ psql TestDb01 < TestDb01_20181125.sql

 

 

リストア後の確認手順

データベース一覧を表示します。

$ psql -l

 

データベースにアクセスします。

$ psql -d TestDb01

 

テーブル一覧を表示します。

TestDb01=# \dt

 

 

 

 

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