今回 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 |
データベースクラスタのリネーム【必要なら】
必要なら既存のデータベースクラスタ「/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 |
リストアの実行
取得したバックアップのリストア手順です。
アーカイブ形式かプレーン形式かで手順が変わります。
- アーカイブ形式 ← 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 |
圧縮している「.sql」ファイルを解凍します。
$ gunzip TestDb01_20181125.sql.gz |
必要に応じて旧データベースを削除します。
※リストア先の情報が残っている場合は、先に削除する必要があります。
postgres アカウントにスイッチします。
# su – postgres |
対象のデータベース(例では TestDb01)を削除します。
$ dropdb TestDb01 |
データベースを作成します。
-bash-4.1$ psql -U postgres
postgres=# create database TestDb01;
postgres=# |
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】
コメント