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

今回 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 コマンド
  • プレーンテキスト形式(スクリプト形式) ← psql コマンド

 

 

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

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

 

  • アーカイブ形式 ← pg_restore コマンドでリストア【可】
  • プレーンテキスト形式(スクリプト形式) ← pg_restore コマンドでリストア【不可】

 

【例】

pg_restore -U test testdb.dump

 

■オプション

  • -U ← 接続ユーザーを指定します。

 

pg_restore コマンドについて

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

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

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

 

  • ラージオブジェクト ← リストア可能
  • シーケンス値 ← リストア可能
  • ロール情報 ← リストア不可(pg_dumpallコマンドで取得したプレーンテキスト形式からのみロール情報をリストアできる)

 

 

 

リストア実行手順(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】

 

 

 

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

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

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