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

公開日時:2018年12月06日 / 最終更新日時:2019年02月11日

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

 

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

 

 

 

pg_dumpall コマンド

pg_dumpall コマンドは論理バックアップを取得します。

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

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

バックアップ形式は「プレーンテキスト形式」のみです。(バイナリ形式でバックアップは取得できません)

 

ユーザー(ロール)やグループ情報(グローバルオブジェクト)も含まれます。

テーブルスペースの定義情報(スキーマ)(グローバルオブジェクト)も含まれます。

 

pg_dumpall コマンド実行ユーザー

一般的に複数のデータベースをバックアップすることとなり、且つそれぞれのデータベースには特定のユーザーで管理されているので、pg_dumpall コマンドは「スーパーユーザー」で実行します。(トラブルの可能性が低くなります)

 

 

pg_dumpall コマンドで取得したバックアップのリストア方法(psql コマンド)

pg_dumpall コマンドでのバックアップはテキスト形式となります。

リストアする際は「psql コマンド」を使用します。

 

 

 

pg_dump コマンド

pg_dump コマンドでも PostgreSQL データベースをバックアップすることができます。

データベースを使用中でも(オンラインでも、サービス中でも)不整合なくバックアップを取得することができます。

 

 

 

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

バックアップを「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]# 

 

 

リストアの実行

取得したバックアップのリストア手順です。

アーカイブ形式かプレーン形式かで手順が変わります。

 

 

リストア実行手順(pg_restore コマンド)

pg_restore コマンドは「pg_dump コマンド」で取得した「アーカイブ形式」のバックアップをリストアできます。

 

 

【例】

pg_restore -U test testdb.dump

 

■オプション

 

pg_restore コマンドについて

pg_restore 実行時に指定したデータベースが存在している必要があります。

PostgreSQL が実行中(postgres プロセスが起動中)でもリストアできます。

ラージオブジェクトやシーケンス値もリストアできますが、ロール情報はリストアできません。

 

 

 

 

リストア実行手順(psql コマンド)

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

 

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

$ 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

 

 

 

 

PostgreSQL シリーズ

今まで学習した PostgreSQL の技術をシリーズとしてまとめました。

 

【PostgreSQL】PostgreSQL の特徴と基本【Part.1】

 

【PostgreSQL】【正規化】リレーショナルデータベース(RDMS)の基本【Part.2】

 

【PostgreSQL】PostgreSQL のインストールと初期設定【Part.3】

 

【PostgreSQL】PostgreSQL の標準付属ツールの説明とコマンド手順【Part.4】

 

【PostgreSQL】PostgreSQL の設定ファイル(postgresql.conf、pg_hba.conf)の解説【Part.5】

 

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

 

【PostgreSQL】PostgreSQL の運用管理(ユーザー管理、バキューム)【Part.7】

 

【PostgreSQL】PostgreSQL の基本的な SQL文 とオブジェクトについて【Part.8】

 

【PostgreSQL】PostgreSQL の組み込み関数、ユーザー定義関数、演算子について【Part.9】

 

【PostgreSQL】PostgreSQL のトランザクションについて【Part.10】

 

【PostgreSQL】SQL文【Part.11】

 

【PostgreSQL】テーブル設計(データ型、制約)【Part.12】

 

 

 

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AlphaOmega Captcha Medica  –  What Do You See?
     
 

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

Secured By miniOrange