目次 PostgreSQL の特徴 インストール インストール方法 環境変数 データベースクラスタ 起動 停止 設定ファイル postgresql.conf ログ出力設定 環境設定 ロール作成 データベース作成 psql バックスラッシュコマンド バックアップ リストア PITR (Point In

Similar documents
PostgreSQLのセキュリティを極める

PostgreSQL の特徴 Copyright 2008 SRA OSS, Inc. Japan All rights reserved. 2

PostgreSQLによる データベースサーバ構築技法

別紙 : 検証環境の構築手順 ( 章 ) 1. サーバ設定 1.1 IP アドレス設定 サーバは以下の 6 台を用いる pgpool-ii サーバ 2 台 DB サーバ 3 台 上位サーバ 1 台 OS は全サーバで CentOS 6.4 x86_64 とする pgpool-ii のサー

PostgreSQL 9.0 のレプリケーションを使ってみよう SRA OSS, Inc. 日本支社佐藤友章 2010/12/11 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 1

PostgreSQL Plus 管理者ガイド

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

CLUSTERPRO for Linux PostgreSQL HowTo

PGECons技術ドキュメントテンプレート Ver.3

はじめに PostgreSQL/PowerGres サポート & 保守サービス でサポート対象になっているサードパーティ製のソフトを紹介 pgfouine pgbadger( 今後サポート対象にする予定 ) PgFincore pg_reorg pg_rman pg_bulkload pg_stat

POSTGRESQL 9.2 /POSTGIS (WINDOWS 版 ) 導入 設定手順書 (VER. 1) June 20, 2014

MxLogonサーバサイドツールキット用UI

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

改訂履歴 版改訂日変更内容 /4/25 新規作成 ライセンス 本作品は CC-BY ライセンスによって許諾されています ライセンスの内容を知りたい方は でご確認ください 文書の内容 表記に関

A : kerl kerl Erlang/OTP Erlang/OTP 2 2 Elixir/Phoenix URL 2 PDF A.2 Bash macos.bash_profile exp

ServerView RAID Manager VMware vSphere ESXi 6 インストールガイド

PGECons技術ドキュメントテンプレート Ver.3

HAクラスタで PostgreSQLを高可用化 (後編) ~ レプリケーション編 ~

<506F C392E30838C A B E E2E2E>

HeartCoreインストールマニュアル

目次 1. はじめに 本文書の目的 前提条件 略語 事前準備 ホスト名の名前解決 Linux 版パッケージ システム要件 ソフトウェア要件 パッケージ構成

ql tar.gz の展 9 開 # su - $ cd /usr/local/src/ $ tar xvzf ql tar.gz PostgreSQL(9.2.4) のインストール $ ls -l /usr/local/src/ drwxrwxr-x 月

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

ADempiere (3.5)

PowerPoint Presentation

PostgreSQL

システムパッケージリリース情報-Version5.0.0pre

Web会議システム IC3(アイシーキューブ)│FAQ│IC3:キヤノンITソリューションズ株式会社

McAfee Application Control ご紹介

対応した JDBC ドライバ (postgresql jdbc4.jar) に変更します 1.OpenDolphin-2.3m\client\pom.xml の下線部分を変更 <version> jdbc41</version> <version> jd

PostgreSQL 9.4 評価検証報告 SRA OSS, Inc. 日本支社高塚遙 :55 ~ 16:30 PostgreSQL 9.4 最新情報セミナー Copyright 2014 SRA OSS, Inc. Japan All rights reserved. 1

Web会議システム IC3(アイシーキューブ)│FAQ│IC3:キヤノンITソリューションズ株式会社

目次 1 環境 バージョン インストール環境 インストール手順 前提条件 CentOS SSHD の設定 VSFTPD の設定 コンテンツ管理 CGI のイ

Sophos Enterprise Console

改訂履歴 版 改訂日 変更内容 /4/25 新規作成 ライセンス 本作品はCC-BYライセンスによって許諾されています ライセンスの内容を知りたい方は 文書の内容 表記に関する

Helix Swarm2018.1アップグレード手順

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

Cuoreテンプレート

ソフトウェアエンジニアリング - 機能 #54

ServerView RAID Manager VMware vSphere ESXi 5 インストールガイド

HeartCoreインストールマニュアル(PHP版)

LEAP を使用して Cisco ワイヤレス クライアントを認証するための Funk RADIUS の設定

任意の間隔での FTP 画像送信イベントの設定方法 はじめに 本ドキュメントでは AXIS ネットワークカメラ / ビデオエンコーダにおいて任意の間隔で画像を FTP サー バーへ送信するイベントの設定手順を説明します 設定手順手順 1:AXIS ネットワークカメラ / ビデオエンコーダの設定ページ

<MW-400k > InterSec/MW400k アップデート適用手順書 2017 年 8 月 1 版

VNX ファイル ストレージの管理

VPN 接続の設定

BOM for Windows Ver

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

VB実用Ⅲ⑩ フリーデータベースⅡ

日レセプラグイン

ServerView RAID Manager VMware vSphere ESXi 5 インストールガイド

SLAMD導入手順

第 3 章 メディア障害とバックアップ リカバリ この章では メディア障害の発生に備えたバックアップ方法と 障害時の基本的なリカバリ方法につい て説明します 1. メディア リカバリ概要 2. ファイルの多重化 3. アーカイブ モードの設定 4. バックアップ概要 5. 一貫性バックアップ ( オ

Microsoft Word - VPN...[.U.K.C.hLinux doc

音声認識サーバのインストールと設定

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

改版履歴 版数 改版日付 改版内容 /03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2

薬剤在庫管理ソフト - インストール・バージョンアップ手順書

スライド 1

CLUSTERPRO MC ProcessSaver 2.3 for Windows ユーザーズガイド ( コマンド編 ) 2018(Jun) NEC Corporation はじめに コマンドリファレンス メッセージ一覧

Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

スライド 1

日医標準レセプトソフト クラウド版の構築手順

Maser - User Operation Manual

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

PC にソフトをインストールすることによって OpenVPN でセキュア SAMBA へ接続することができます 注意 OpenVPN 接続は仮想 IP を使用します ローカル環境にて IP 設定が被らない事をご確認下さい 万が一仮想 IP とローカル環境 IP が被るとローカル環境内接続が行えなくな

RADIUS サーバを使用して NT のパスワード期限切れ機能をサポートするための Cisco VPN 3000 シリーズ コンセントレータの設定

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

GettingStartedTK2

使用する前に

Transcription:

OSS-DB Exam Silver 技術解説無料セミナー 2018/1/20 SRA OSS, Inc. 日本支社千田貴大

目次 PostgreSQL の特徴 インストール インストール方法 環境変数 データベースクラスタ 起動 停止 設定ファイル postgresql.conf ログ出力設定 環境設定 ロール作成 データベース作成 psql バックスラッシュコマンド バックアップ リストア PITR (Point In Time Recovery) VACUUM / ANALYZE セキュリティ管理 pg_hba.conf ユーザ権限 テーブル権限

PostgreSQL の特徴

標準 SQL の大部分とその他の先進的な機能をサポートする本格的なオープンソース RDBMS 20 年以上の歴史を持ち 現在も活発な開発体制 1 年に 1 度のメジャーバージョンアップ 1 年に数回のマイナーバージョンアップ 豊富なプラットフォームに対応 Unix 系 OS 全般 Windows 2000 SP4 以降 Mac OS X 豊富なサポート言語 C, ECPG, C++, Java, Tcl/TK, Python, Perl, PHP, Ruby, ODBC,.NET Data Provider など

バージョン番号規則 9. 6. 1 メジャーバージョン マイナーバージョン メジャーバージョンアップでは仕様の追加 変更 移行には付属コマンドでのバックアップ リストアが必要 マイナーバージョンアップでは主にバグ修正

コミュニティの役割 PostgreSQL 公式開発コミュニティ 仕様検討 開発 リリース 不具合報告 日本 PostgreSQL ユーザ会 (JPUG) 迅速な最新ドキュメント翻訳 PostgreSQL エンタープライズ コンソーシアム (PGECons) 毎年テーマ別に検証および結果公表 公式開発コミュニティへの改善リクエスト

ライセンス PostgreSQL ライセンス BSD ライセンスに類似 広告条項はなし ( 修正 BSD ライセンス ) 使用 複製 改変 配布の自由 複製においては以下を含めることが条件 著作権表示 ライセンス条文 免責条項 具体的には PostgreSQL ソースコードに添付されている COPYRIGHT ファイルを配布物に含めるか その内容をマニュアルに印刷すればよい

クライアント サーバ構成 libpq プロトコル クライアント サーバの OS の違いを吸収 軽量クライアント サーバの変更に影響されにくい INSERT UPDATE DELETE PostgreSQL バックエンド ( サーバ )

マルチバイト対応 文字エンコーディング データベースごとに指定 フロントエンド ( バックエンドとの通信 ) ごとに変更できる 日本語を扱う一般的な組み合わせ バックエンド ( データベース ) UTF8 UTF8, EUC_JP, SJIS フロントエンド ( クライアント ) EUC_JP UTF8, EUC_JP, SJIS

PostgreSQL のインストール

Linux ソースコードからのインストール パッケージによるインストール ディストリビュータ配布のパッケージ PostgreSQL 開発元配布のパッケージ Windows one click installer によるインストール

ソースコードからのインストール ソースコードの入手 https://www.postgresql.org/ftp/source/ など postgres ユーザの作成 # useradd postgres ダウンロードしたソースコードを展開 存在していない場合は作成 $ su - # tar jxf postgresql-9.6.6.tar.bz2 -C /usr/local/src # chown -R postgres /usr/local/src/postgresql-9.6.6

ソースコードからのインストール インストール先ディレクトリ作成 # mkdir /usr/local/pgsql # chown postgres /usr/local/pgsql configure 省略可能 省略した場合 インストール時に root 権限が必要 コンパイルの準備 ( 必要なツールの有無を調査 ) # su postgres $ cd /usr/local/src/postgresql-9.6.6 $./configure よく使われるオプション --prefix=dir $./configure --help インストール先を指定する ( デフォルトは /usr/local/pgsql)

ソースコードからのインストール コンパイル リグレッションテスト 仮のデータベースクラスタで PostgreSQL を起動し 想定どおりに正しく動作するかテストする インストール $ make world $ make check $ make install-world インストール先 (/usr/local/pgsql) が postgres 所有でなければ root 権限が必要

パッケージによるインストール PostgreSQL コミュニティがビルドして 提供しているバイナリパッケージ 各 Linux ディストリビューションに合わせたパッケージが必要 yum レポジトリ yum レポジトリを登録することで yum コマンドから各 PostgreSQL の RPM パッケージのインストールやマイナーアップデートが可能となる http://yum.postgresql.org/ で yum レポジトリの設定を行う RPM ファイルを取得し 登録 # rpm -ivh pgdg-centos96-9.6-3.noarch.rpm

パッケージによるインストール 基本機能 postgresql96( クライアント ) postgresql96-server( サーバ ) postgresql96-libs( 共有ライブラリ ) オプション機能 postgresql96-contrib( 追加モジュール ) postgresql96-docs( ドキュメント ) postgresql96-devel( 開発用ライブラリ ) postgresql96-pl*( 手続き言語 )

パッケージによるインストール yum コマンドでインストール # yum install postgresql96 postgresql96-libs postgresql96-server postgres ユーザアカウントが作成される ホームディレクトリは /var/lib/pgsql 環境変数の設定 /var/lib/pgsql/.bash_profile インストール先ディレクトリ /usr/pgsql-9.6 セットアップスクリプト /usr/pgsql-9.6/bin/postgresql96-setup

Windows http://www.postgresql.org/download/windows EnterpriseDB 社が提供している 導入が簡単な one click installer Windows 版 PostgreSQL サーバ / クライアント pgadmin III Stack Builder データベースクラスタの作成 Windows サービスとして動作 データベースのスーパユーザ "postgres" の作成

Windows インストーラの設定手順 ユーザアカウントの作成 データベースクラスタの作成 Windows サービスとして自動起動 ディレクトリ構成 インストール時に指定したディレクトリ C:\Program Files\PostgreSQL\9.6\ データベースクラスタ C:\Program Files\PostgreSQL\9.6\data\

環境変数 PostgreSQL コマンドディレクトリをコマンドパスに追加 ~/.bash_profile に以下を追加 /usr/local/pgsql ( デフォルトのインストール先 ) にインストールした場合の例 $ vi ~/.bash_profile PGHOME=/usr/local/pgsql export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH export MANPATH=$PGHOME/share/man:$MANPATH export PGDATA=/usr/local/pgsql/data 設定の反映 $. ~/.bash_profile 反映後 psql などのコマンドにパスが通っていることを確認

データベースクラスタ $PGDATA で指定したディレクトリを作成し データベースクラスタの初期化を行う [postgres]$ initdb -encoding=utf8 --no-locale --encoding=utf8 デフォルトの文字エンコーディングを UTF8 に設定 --no-locale または --locale=c デフォルトのロケールを 利用しない に設定主に日本語と英語を格納するならロケールは不要

データベースクラスタ initdb を実行したユーザが PostgreSQL の スーパーユーザになる テンプレートデータベース (template0, template1) と postgres データベースが 実際に使用すべき 作成される データベースではない template0 は書き込み不可 template1 は書き込み可 データベースクラスタ ($PGDATA) データベースA template0 template1 postgres テーブルテーブル データベース B テーブルテーブル

起動 停止 データベースデーモンの起動 $ pg_ctl start -w データベースデーモンの停止 直ちに終了したい場合 (fast mode) 接続中のユーザが行っている処理は無効になる $ pg_ctl stop 全てのクライアントが切断するまで待つ (smart mode) $ pg_ctl stop -m s 適切な終了処理をせずに直ちに停止 (immediate mode) $ pg_ctl stop -m i 次回起動時に復旧する

設定ファイル

postgresql.conf PostgreSQL の設定ファイル postgresql.conf pg_hba.conf ( セキュリティ管理 で取り上げます) デフォルトでは $PGDATA にある 書式 変数 = 値 設定の反映 $ pg_ctl reload $ pg_ctl restart -w (change requires restart) の記述があるパラメータを変更した場合

postgresql.conf データベースの実行時の設定項目のこと 各項目を GUC 変数と呼ぶことがある postgresql.conf で設定 SHOW/SET で閲覧 設定 実行時に変更できる client_encoding など reload が必要 log_connections など 再起動が必要 shared_buffers など SET name TO value; SHOW name; $ psql postgres=# SHOW listen_addresses; listen_addresses ------------------ * (1 row) postgres=# SHOW ALL; ( 省略 ) \q で終了

ログ出力設定 ログ取得の目的 不正アクセスの検知 障害の早期発見 デバッグ ログ取得の方法 Syslog に取る Windows ならイベントログに 標準エラー出力のリダイレクト

ログ出力設定 PostgreSQL 自身がログ管理 $PGDATA/pg_log 以下にログファイルができる ファイルローテーションされる postgresql.conf を設定 #log_destination = 'stderr' logging_collector = on #log_directory = 'pg_log' log_filename = 'postgresql-%d.log' log_line_prefix = '%t [%p] ' $ pg_ctl restart -w postgres=# ERROR; 適当な構文エラーを発生させてログ出力確認 $ less $PGDATA/pg_log/postgresql-< 今日の日付 >.log

ログ出力設定 Syslog(Unix 系 OS のログを記録する機能 ) を利用 /var/log 以下のログファイルに出力 複数のアプリケーションのログを一元管理できる postgresql.conf を設定 log_destination = 'syslog' #syslog_facility = 'LOCAL0' #syslog_ident = 'postgres' log_line_prefix = '' postgresql.conf 再読み込み ( 再起動でも可 ) postgres$ pg_ctl reload

ログ出力設定 /etc/rsyslog.conf を変更 ファシリティが LOCAL0 のログを /var/log/postgresql というファイルへ出力する設定 *.info;mail.none;authpriv.none;cron.none /var/log/messages *.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages local0.* /var/log/postgresql Syslog を restart root# service rsyslog restart 設定変更を確認 postgres=# ERROR; 適当な構文エラーを発生させてログ出力 # less /var/log/postgresql

環境設定

ロール作成 データベースユーザ ( ロール ) を登録しそのロールで操作する createuser (PostgreSQL コマンド ) -d オプションでデータベース作成権限を与えます $ createuser --help $ createuser -d ロール名 CREATE ROLE (SQL 文 ) CREATEDB でデータベース作成権限を与えます LOGIN でログイン権限を与えます (createuser の場合デフォルトで付与されています ) =# CREATE ROLE ロール名 CREATEDB LOGIN

データベース作成 データベースクラスタ ($PGDATA) には複数のデータベースが作成できる 作成方法 createdb (PostgreSQL コマンド ) [postgres]$ createdb データベース名 データベース名を省略すると コマンドを実行している OS のユーザと同じ名前のデータベースを作成 CREATE DATABASE 文 (SQL) =# CREATE DATABASE データベース名

psql psql = SQL 発行ツール psql の起動方法 psql [ オプション ].. [ DB 名 [ ユーザ名 ] ] 例 $ psql postgres < 一般ユーザ名 > psql (9.6.1) Type "help" for help. postgres=> 接続しているデータベース名

psql プロンプト =# 接続しているユーザはスーパーユーザ => 接続しているユーザは一般ユーザ 2 行目以降は -# -> userdb=> SELECT * FROM --ここにコメントが書けます userdb-> pg_user; --ここにコメントが書けます SQL の発行 ; で SQL の終わりを意味し コメントは -- SQL 構文中の空白やタブ 改行は一つの空白と扱う SQL 構文の大 / 小文字は区別されない日本語も可 Linux では Ctrl-C で入力をキャンセル psql の終了方法 \q または Ctrl-D

psql -h ホスト名 データベースホスト名を指定 -p ポート番号 TCP/IPポートの指定 -d データベース 接続するデータベース名を指定 -U ユーザ名 接続ユーザ名を指定 -c SQL 文 引数で与えたSQL 文 (1つ) を実行させる -f ファイル名 ファイルに記述してあるSQLコマンドを受け付け -o ファイル 出力結果をファイルに格納する -l データベースの一覧を表示 -t カラム名と行数フッターなどの表示を無効にする -V psqlのバージョンを表示 (--version) -? psqlのヘルプを表示 (--help)

バックスラッシュコマンド \? コマンド一覧 \encoding エンコーディングの表示 設定 \h [SQL 文 ] SQL 文のヘルプ \l データベース一覧 \d[t i s v S] テーブル インデックス シーケンス ビュー システムテーブルの一覧 \d [NAME] 指定したテーブル インデックス シーケンス view を表示 \d+ [NAME] 指定したオブジェクトの詳細を表示 view 定義を表示 \dp ( \z ) \du \df \ef [NAME] テーブル ビュー シーケンスのアクセス権限一覧 ロール ( データベースユーザ ) 一覧 関数一覧 関数編集 または作成 \x テーブルの表示モードを変更

バックアップ リストア

バックアップ戦略 pg_dump コマンドによる論理バックアップ データベースクラスタ全体の物理バックアップ PITR(Point-In-Time Recovery) その他 レプリケーション機能の利用 PostgreSQL のストリーミングレプリケーション レプリケーションソフトウェアの利用 外部ツールを使う

PITR Point In Time Recovery ベースバックアップとアーカイブログを使ってデータベースを最新の状態までリストアする手法 PostgreSQL のデータ書き込みの流れ データの更新処理 1 更新内容の書き込み 2 更新を適用 WAL (Write-Ahead Log) データベースクラスタ内の pg_xlog ディレクトリに格納 データベース 不要になった WAL は通常削除される

PITR 1 WAL ファイルをアーカイブデモでは /mnt/pg_arc/log に格納 WAL 5WAL を順番に適用して最新の状態まで復旧 アーカイブログ 3 障害発生 データベース 4 物理リストア 2 物理バックアップデモでは /mnt/pg_arc/base に格納

WAL アーカイブの設定 準備 PITR で使用するディレクトリを作成 $ su - # mkdir /mnt/pg_arc # chown postgres /mnt/pg_arc $ su - postgres $ mkdir /mnt/pg_arc/base $ mkdir /mnt/pg_arc/log WAL ファイルをアーカイブする設定 postgresql.conf を編集 %p WALの相対パスに置き換わる wal_level = replica %f WALのファイル名に置き換わる max_wal_senders = 2 archive_mode = on archive_command = 'cp "%p" "/mnt/pg_arc/log/%f"' $ pg_ctl restart -w

WAL アーカイブ設定の確認 pgbench PostgreSQL に同梱されているベンチマークツールで 通常は性能測定に利用しますが ここでは多数のデータ更新を発生させる目的で利用 $ pgbench -i -s 10 $ pgbench -i 初期化 -s スケール データが投入されたことで WAL がアーカイブされていることを確認 $ ls /mnt/pg_arc/log 000000010000000000000003 000000010000000000000004

pg_basebackup データベースサーバを停止せずに物理バックアップを取得するコマンド バックアップモードへの移行を自動的に行い データベースクラスタ全体をコピー スーパーユーザ (postgres) で実行 PostgreSQL のレプリケーション接続を経由してコピーを取得 あらかじめサーバ側へストリーミングレプリケーションと同等の設定が必要

pg_basebackup postgresql.conf wal_level WAL をどのくらい詳細に出力するか指定 $ cd $PGDATA $ vi postgresql.conf $ vi pg_hba.conf $ pg_ctl restart -w replica ストリーミングレプリケーション機能や pg_basebackup を利用する場合 max_wal_senders WAL 送信プロセスの最大数 wal_level = replica max_wal_senders = 2 pg_hba.conf ( クライアント認証設定 ) local 接続で replication( 仮想データベース ) へ postgres ロールでの接続について無条件で接続を許可 local replication postgres trust

pg_basebackup ベースバックアップを作成 $ pg_basebackup -D /mnt/pg_arc/base/001 -P 46282/46282 kb (100%), 1/1 tablespace $ ls /mnt/pg_arc/base/001 -D バックアップ先ディレクトリを指定 -P 進行状況を表示 -h, -p 接続先ホスト ポートを指定 ( デフォルトでは local の 5432 ポートへ接続 ) 物理バックアップが取得できていることを確認 -Xs リストアに必要な WAL を同時に取得

PITR リカバリ確認用にデータ更新 pgbench にて適当にデータ更新後確認用にテーブルを作成 $ pgbench -c 30 -t 50 $ psql =# CREATE TABLE test (id INT); =# \d =# \q -c 同時接続数 -t トランザクション数 データベースクラスタが壊れたことを想定 PostgreSQL を強制停止し $PGDATA を別名に変更します $ pg_ctl stop -m i $ cd /usr/local/pgsql $ mv data data_crash

PITR ベースバックアップを展開しログを削除 $ pwd /usr/local/pgsql $ cp -r /mnt/pg_arc/base/001 data $ ls bin data data_crash include lib share $ cd data/ $ rm -rf pg_log/* リカバリ設定ファイルを作成 $ vi recovery.conf %p WAL の相対パスに置き換わる %f WAL のファイル名に置き換わる restore_command = 'cp "/mnt/pg_arc/log/%f" "%p"'

PITR リカバリモード リカバリ設定ファイル recovery.conf がデータベースクラスタ内に存在している状態で起動 restore_command アーカイブされた WAL ファイルを取得するためのコマンド アーカイブ領域に存在する最新の WAL ファイルまでリカバリ 最後に稼働していたデータベースクラスタ内のアーカイブされていない WAL ファイルをアーカイブ領域へ手動コピー $ cd /usr/local/pgsql/data_crash $ ls pg_xlog $ ls /mnt/pg_arc/log $ cp pg_xlog/*../data/pg_xlog/ 両ディレクトリの WAL を比較し アーカイブされていない WAL があればコピー

PITR リカバリモードで起動 $ pg_ctl start -w リカバリ中はデータベースに接続できない 別端末で実行 ( サーバがリカバリ中は 以下の出力になる ) $ psql psql: FATAL: the database system is starting up リカバリ終了 recovery.conf の名称が recovery.done に変わる pg_log に archive recovery complete が出力 確認用に作成した test テーブルが復旧

VACUUM / ANALYZE

不要領域の削除 ( ガベージコレクション ) 更新しても古い行は残す仕組み どのトランザクションからも参照されない行は 無駄なデータなので VACUUM コマンドで削除する 削除しないと ファイルの肥大化し パフォーマンスが低下 UPDATE users SET name = 'ito' WHERE id = 2; VACUUM; id name id name id name 1 sato 1 sato 1 sato 2 suzuki 3 tanaka 2 suzuki 3 tanaka 2 ito 不要領域 3 tanaka 2 ito 再利用可能

vacuumdb(postgresql コマンド ) postgres$ vacuumdb [-t テーブル名 ] [ データベース名 ] VACUUM 文 (SQL) userdb=# VACUUM [ テーブル名 ]; 不要となった行を探し 再利用できるようにする ファイルサイズは減らない VACUUM FULL 文 ファイルサイズを縮める 実行中は SELECT もできなくなるので 運用中には使えない

統計情報の更新が必要 userdb=# ANALYZE [ テーブル名 ]; インデックスを使うかどうかは 統計情報による ANALYZEで統計情報を更新する ANALYZEしないと最適な検索方法が使用されない テーブルの内容が大幅に変わった後には ANALYZE 実行を推奨 postgres$ vacuumdb -az すべてのデータベースで VACUUM と ANALYZE を実行する

自動バキューム (autovacuum) postgresql.conf で設定 デフォルトで on #autovacuum = on データベースの更新量に合わせて 適宜 VACUUM や ANALYZE を自動で実行 データベース更新量を把握するには 統計情報コレクタの機能を使用 その分の負荷はわずかながら余分にかかる

セキュリティ管理

pg_hba.conf クライアント認証 クライアントアプリケーションがデータベースに接続するときの認証 $PGDATA/pg_hba.conf で設定 ロール ( ユーザ ) の属性 ロールが行う操作の権限の一部はロールの属性として管理される テーブル単位のアクセス権 テーブルを作成したユーザだけにアクセス権がある GRANT 文 ( 各種権限を与える ) REVOKE 文 ( 各種権限を取り上げる )

クライアント認証 $PGDATA/pg_hba.conf ファイルで設定 データベースサーバを起動時に読み込まれ 複数行ある場合は 上から評価される 1 行に 1 つの設定を記述 接続タイプ データベース名 ユーザ名 IP アドレス範囲 認証方法とそのオプション 接続しようとしているクライアントに関する設定がない場合 アクセスは拒否される pg_ctl reload で修正を反映

pg_hba.conf local dbname user auth-type [option] host dbname user IP-address IP-mask auth-type [option] hostssl dbname user IP-address IP-mask auth-type [option] hostnossl dbname user IP-address IP-mask auth-type [option] host dbname user CIDR-address auth-type [option] hostssl dbname user CIDR-address auth-type [option] hostnossl dbname user CIDR-address auth-type [option] 接続形式 local host hostssl hostnossl ローカル接続 (UNIX ドメイン接続 ) の場合に対応 ホスト接続 (TCP/IP) の場合に対応 ホストを指定した場合が該当する SSL 接続でも通常の接続でもどちらでもよい ホスト接続で SSL 接続である場合に対応 ホスト接続で SSL 接続でない場合に対応

pg_hba.conf dbname user カンマ区切りで複数指定可能 all sameuser samerole (samegroup) dbname 接続するデータベース すべてのデータベース 接続ユーザと同じ名前のデータベース 接続ユーザが属しているグループと同じ名前のデータベース all +groupname @filename user 接続時の PostgreSQL のユーザ すべてのユーザ 指定したグループに属しているメンバ ファイルに書いてあるユーザ @filename ファイルに書いてあるデータベース

pg_hba.conf CIDR-address(CIDR 記法によるアドレス ) ホスト接続のクライアント IP アドレス範囲 local 指定のときは空欄とする ホスト名での指定も可能 例 : ローカルホストからの TCP/IP 接続のみに限定する 127.0.0.1/32 代わりに IP-address と IP-mask による記述も可能 192.168.128.0 255.255.255.0

pg_hba.conf auth-type trust reject md5 password gss sspi peer ident ldap radius cert pam 無条件で許可無条件で拒否 MD5 暗号化パスワード認証平文パスワード認証 GSSAPI 認証 SSPI 認証 Peer 認証 Ident 認証 LDAP 認証 RADIUS 認証 SSLクライアント証明書認証 PAM 認証 gss は 接続形式が local の場合は使用できません

pg_hba.conf データベースユーザにパスワードを与える パスワードが設定されていない状態ではパスワード認証でログインできない パスワード設定方法 ユーザ作成時にいっしょにパスワードを設定する $ createuser -P < 一般ユーザ名 > Enter password for new role: ( パスワード入力 ) Enter it again: ( 再度パスワード入力する ) 後からパスワードを設定する userdb=> \password < 一般ユーザ名 >

pg_hba.conf host 接続 (TCP/IP) で userdb データベースなら md5 で認証する例 先頭行に追加する # TYPE DATABASE USER CIDR-ADDRESS METHOD host userdb all 0.0.0.0/0 md5 # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust パスワード認証になるか確認 postgres$ pg_ctl reload postgres$ psql -h 127.0.0.1 userdb < 一般ユーザ名 >

ユーザ権限 ロールは ( 主に権限の有無を示した ) 属性を持つ ロールの属性 ログイン権限 LOGIN データベース作成権限 CREATEDB ロール作成権限 CREATEROLE スーパーユーザ権限 SUPERUSER レプリケーション権限 REPLICATION 行単位セキュリティポリシーを無視する権限 BYPASSRLS 接続数の上限 CONNECTION LIMIT connlimit パスワード PASSWORD 'password' パスワード期限 VALID UNTIL 'timestamp' 権限継承 IN ROLE role_name

ユーザ権限 属性はロール作成時に定義される ロール作成後も ALTER ROLE 文によって変更可能 ロールの作成時 他のロールを指定してそのロールの権限を継承させることができる ( グループとしてのロール ) =# CREATE ROLE group1 LOGIN; CREATE ROLE =# CREATE ROLE user1 LOGIN CREATEDB CREATEROLE NOSUPERUSER CONNECTION LIMIT 1 PASSWORD 'pass' IN ROLE group1; CREATE ROLE =# ALTER ROLE user1 SET client_encoding TO 'EUC_JP'; =# \du

テーブル権限 デフォルトでは テーブルを作成したユーザのみすべての権限がある GRANT 文で権限を与える REVOKE 文で権限を取り上げる GRANT 権限 ON テーブル TO 対象 ; REVOKE 権限 ON テーブル FROM 対象 ; 権限の種類 対象 右表参照 ALL PRIVILEGES を指定するとすべての権限が与えられる PUBLIC を指定すると全ユーザ ユーザ名かグループ名 SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER CREATE CONNECT TEMPORARY EXECUTE USAGE SELECT 文 COPY TO 文の実行 INSERT 文 COPY FROM 文の実行 UPDATE 文 SELECT FOR { UPDATE SHARE } 文の実行 DELETE 文の実行 TRUNCATE 文の実行 外部キー制約の作成 トリガの作成 スキーマ作成 オブジェクト作成 データベースへの接続 一時テーブル作成 指定の関数 演算子の実行 指定言語での関数作成

テーブル権限 権限の確認 userdb=> \dp fruit Access privileges Schema Name Type Access privileges Column --------+-------+-------+-------------------+-------- public fruit table (1 row) PUBLIC に SELECT の権限を与える userdb=> GRANT SELECT ON fruit TO PUBLIC; userdb=> \dp fruit アクセス権限は 以下のようになる < 一般ユーザ名 >=arwddxt/< 一般ユーザ名 >+ =r/< 一般ユーザ名 > r w a d D x t X U C c T SELECT UPDATE INSERT DELETE TRUNCATE REFERENCES TRIGGER EXECUTE USAGE CREATE CONNECT TEMPORARY

ご清聴ありがとうございました お問い合わせ SRA OSS, Inc. 日本支社千田貴大 E-mail: sales@sraoss.co.jp