第1回では、より使いやすく、よりセキュアにデータベースの運用管理を行えるようになった PowerGres Plus V9.1 の評価版を使い、インストールからデータベースのセットアップ、基本的なデータベース操作までを紹介します。
PowerGres Plusをインストールしていきます。インストール作業はrootユーザで行います。
以下の URL から PowerGres Plus V9.1(Linux 版)の評価版をダウンロードします。
[PowerGres Plus(Linux 版) 評価版ダウンロード] https://powergres.sraoss.co.jp/pgweb/s/ja/download/download-PlusLinux.php[root@node1 ~]# tar zxvf powergresplus-9.1.tar.gz powergresplus-9.1/ powergresplus-9.1/LICENSE : : powergresplus-9.1/proj-COPYING.txt powergresplus-9.1/update.sh
展開したディレクトリに移動し、インストールスクリプトを実行します。
使用許諾契約書の内容に同意し、ライセンスキーを入力します。 ライセンスキーはEvaluationと入力しましょう。 製品版と同じ機能が60日間無料で利用できます。[root@node1 ~]# cd powergresplus-9.1 [root@node1 powergresplus-9.1]# cd powergresplus-9.1 [root@node1 powergresplus-9.1]# sh install.sh 本ソフトウェアプログラムは、以下の 「使用許諾契約書」 の条件にしたがって 使用許諾されます。したがって、必ず本製品をインストールする前に「使用許 : : Do you agree to the license terms (yes/no): yes Please enter the license key (XXXX-XXXX-XXXX-XXXX): Evaluation License key is for evaluation purposes. You can use during the 60-day trial period.ライセンスキーを入力すると、続けて共有メモリに関するカーネルパラメータの設定が行われます。
Checking kernel parameters... kernel.shmmax: 515736576 (no need for change) kernel.shmall: 125912 (no need for change)カーネルパラメータの設定値が推奨値よりも少ない場合は、推奨値まで増やすかどうか尋ねられるので、yes と入力しましょう。
Checking kernel parameters... kernel.shmmax: 257868288 -> 515736576 kernel.shmall: 62956 -> 125912 Do you change the kernel parameters (yes/no): yes Changing kernel parameters... Done.
これらのサイズが共有メモリセグメントの上限値 (SHMMAX) をうわまわってしまうと、PostgreSQL は起動できなくなります。
以下はその例です。 PowerGres Plusの管理ツールを使用せずに直接コマンドラインでPostgreSQLを起動しようとすると、エラーメッセージが表示されて起動に失敗します。[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data start サーバは起動中です。 [postgres@node1 ~]$ 2013-05-13 17:19:23 JST [25382] FATAL: could not create shared memory segment: Invalid argument 2013-05-13 14:19:23 JST [25382] DETAIL: Failed system call was shmget(key=5440001, size=4011376640, 03600). 2013-05-13 14:19:23 JST [25382] HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX......したがって、豊富なメモリを利用してPostgreSQLを稼動する場合は、PostgreSQL 側の設定だけでなく、OS側の設定も必要である点に注意が必要です。
ただし、最近のOSは共有メモリに関する設定は大きめになっており、あまり問題になることはありません。
PowerGres Plusのインストールスクリプトでは、SHAMAXの推奨値を搭載メモリの25%としています。 また、システム全体の共有メモリの総量 (SHMALL) も、SHAMMAX に応じた値に設定されます。Installing packages... 準備中... ########################################### [100%] 1:powergresplus91-libs ########################################### [ 7%] : : 13:powergresplus91-pltcl ########################################### [ 93%] 14:powergresplus91-test ########################################### [100%] Installing license key... Done. PowerGres Plus V9.1 installation completed.以上でインストールは完了です。
/opt/powergresplus91/ | PowerGres Plus のインストールディレクトリ | ||
├ | bin/ | PowerGres Plus 実行ファイル | |
├ | etc/ | PowerGres Plus 設定ファイル | |
├ | include/ | C言語用ヘッダファイル | |
├ | lib/ | C 言語用ライブラリファイル | |
├ | libexec/ | 形態素解析 – MeCab 実行ファイル | |
├ | share/ | マニュアル及び各種共有ファイル | |
└ | ssl/ | 透過的データ暗号化で利用する OpenSSL のマニュアルおよびスクリプトファイル |
以下の表は代表的なコマンドです。
コマンド | コマンドの説明 | コマンド | コマンドの説明 |
---|---|---|---|
initdb | データベースクラスタの初期化 | pg_dump | データベースの論理バックアップ |
createdb | データベースの作成 | pg_restore | 論理バックアップからデータベースのリストア |
dropdb | データベースの削除 | pgx_dmpall*1 | データベースクラスタ、テーブル空間、設定ファイルのバックアップ |
createuser | データベースユーザの登録 | pgx_rcvall*1 | データベースクラスタ、テーブル空間、設定ファイルのリカバリ |
dropuser | データベースユーザの削除 | psql | SQL インタープリタ |
pg_ctl | データベースサーバの起動・停止など | pgx_getenvdata*1*2 | データベース環境の情報を取得 |
PATH=/opt/powergresplus91/bin:$PATH MANPATH=/opt/powergresplus91/share/man:$MANPATH LD_LIBRARY_PATH=/opt/powergres91/lib:$LD_LIBRARY_PATH export PATH MANPATH LD_LIBRARY_PATH このページのトップへ戻る セットアップ
管理ツールでデータベースクラスタを作成します。
ウィザードに従って、以下の情報を入力していきます。
設定項目 | 設定値 | 設定項目の説明 |
---|---|---|
ラベル | plus91 | 管理ツールで管理するデータベースクラスタの識別名です。 |
ポート | 5432 | データベースの接続ポート番号です。 |
データベースディレクトリ | /var/lib/pgsql/data | データベースクラスタのディレクトリです。 |
バックアップディレクトリ | /var/lib/pgsql/backups | データベースのバックアップで使用されるディレクトリです。 |
文字エンコーディング | UTF8 | データベース側のデフォルトの文字エンコーディングです。 |
スーパーユーザ名 | postgres | データベースのスーパーユーザを指定します。 |
パスワード | 任意 | 上記ユーザのパスワードを指定します。 |
ラベル、ポート、を入力して「進む(F)」をクリックします。
データベースディレクトリと、バックアップディレクトリを入力します。 今回は /var/lib/pgsql ディレクトリ以下に作成します。 バックアップディレクトリには、PowerGres Plus の独自機能である、二重化されたトランザクションログが格納されます。また、アーカイブログや、データベースクラスタの物理バックアップ(ベースバックアップ)なども、バックアップディレクトリに格納されます。
このディレクトリには、PowerGres Plus の独自機能である二重化されたトランザクションログも格納されます。
トランザクションログとは、データベースの変更情報が格納されたバイナリファイルです。 PowerGres Plus のベースとなっているPostgreSQLは、高速なアクセスと処理を実現するために、データベースの読み書きを共有メモリ上で行います。 また、共有メモリ上の変更内容は直接データベースが配置されているディスクに書き込まれる前に、いったんトランザクションログとして出力され、ある程度トランザクションログが溜まったところでデータベース本体に書き込まれます。仮にサーバプロセスがクラッシュして、共有メモリ上のデータが消失したとしても、PostgreSQL はトランザクションログ利用することによって、データベースを障害直前の状態まで復旧することが可能です。
しかしながら、PostgreSQL は、トランザクションログを一箇所にしか作成しません。 したがって、ディスク障害などによって使用中のトランザクションログが失われてしまうと、データベースの運用継続、復旧ができなくなってしまいます。 そこで、PowerGres Plus では PostgreSQL に機能拡張を行い、データベースが使用しているトランザクションログと同一のファイルを別のディスクへ出力できるようになっています。パスワードを入力して「進む(F)」をクリックします。
データベースクラスタの初期化が行われ、管理ツールへのデータベース登録が完了しました。
登録したデータベースサーバを起動します。「サービス」をクリックし、「サービスを開始」をクリックします。
正常にサービスが起動すると、「サービスを開始」がグレーアウトします。
管理ツールを使ったデータベースのセットアップ手順を、コマンドラインのみで行ってみます。
initdb コマンドの主なオプションは以下の通りです。
オプション | オプションの説明 |
---|---|
–encoding | データベース側のデフォルトの文字エンコーディングを指定します。 |
–no-locale | ロケール機能を使用しません。Linux 環境では一般に指定した方がよいオプションです。 |
-D | データベースクラスタのディレクトリを指定します。 |
[postgres@node1 ~]$ initdb --encoding=UTF8 --no-locale -D /var/lib/pgsql/data データベースシステム内のファイルの所有者は"postgres"ユーザでした。 このユーザがサーバプロセスを所有しなければなりません。 : : または pg_ctl -D /var/lib/pgsql/data -l logfile start [postgres@node1 ~]$ ls /var/lib/pgsql/data PG_VERSION global pg_hba.conf pg_multixact pg_serial pg_subtrans pg_twophase postgresql.conf base pg_clog pg_ident.conf pg_notify pg_stat_tmp pg_tblspc pg_xlog
上記のようにメッセージが続き、データベースクラスタが作成されます。
[postgres@node1 ~]$ mkdir /var/lib/pgsql/backups [postgres@node1 ~]$ chmod 700 /var/lib/pgsql/backups [postgres@node1 ~]$ ls -dl /var/lib/pgsql/backups drwx------ 2 postgres postgres 4096 5月 13 15:01 /var/lib/pgsql/backupsまた、postgresql.conf ファイルの編集を行います。 以下の通りパラメータを変更します。 postgresql.conf ファイルはデータベースクラスタディレクトリ内にあります。
wal_level = hot_standby archive_mode = on archive_command = '"/opt/powergresplus91/bin/pgx_xlogcopy.cmd" "%p" "/var/lib/pgsql/backups/archived_xlog/%f"' backup_destination = '/var/lib/pgsql/backups'
パラメータの内容は以下の通りです。
パラメータ | パラメータの説明 |
---|---|
wal_level | トランザクションログに出力する情報量を指定します。archive または hot_standby を指定します。 |
archive_mode | アーカイブモードの有効化。 |
archive_command | トランザクションログをアーカイブする際のコマンド。 |
backup_destination | バックアップディレクトリを指定します。 |
アーカイブログの出力先は、バックアップディレクトリ配下の “archived_xlog” ディレクトリ内である点に注意してください。
[postgres@node1 ~]$ pg_ctl start -D /var/lib/pgsql/data サーバは起動中です。 [postgres@node1 ~]$ pg_ctl status -D /var/lib/pgsql/data pg_ctl: サーバが動作中です(PID: 23623) /opt/powergresplus91/bin/postgres "-D" "/var/lib/pgsql/data"
セキュリティや誤操作防止の観点から、通常の操作はスーパーユーザとは別に一般ユーザを作成し、そのユーザで操作を行うことをおすすめします。
データベースユーザは厳密には「ロール」と呼びます。 ロールという概念は、ユーザとグループをまとめたものです。PowerGresではログイン権限やデータベースオブジェクトへの各権限などをロール単位で設定します。
「オブジェクト」の「ロール」を見ると、ロールが確認できます。 データベースセットアップ直後は、データベースのスーパーユーザpostgresのみが作成されており、一般ユーザは作成していないので存在しません。 データベースの作成権限のある一般ユーザを作成しましょう。「ロールを作成」をクリックします。
ロールの情報と権限は以下の通りとします。
ロール作成項目 | 設定値 |
---|---|
ロール名 | testuser |
パスワード | 任意 |
ログイン権限 | あり |
スーパーユーザ権限 | なし |
データベース作成権限 | あり |
ロール作成権限 | なし |
レプリケーション権限 | なし |
ロール名、パスワードを入力し、必要な権限にチェックを入れて「OK(O)」をクリックします。
「オブジェクト」の「ロール」から testuser が追加されていることが確認できます。
管理ツールを使ったロールの追加手順を、コマンドラインのみで行ってみます。
ロールの追加は、createuser コマンドを使います。 createuser コマンドは対話的にロールを追加することができます。 -P オプションを指定して追加したいロールにパスワードを設定します。 引数に追加したいロール名を指定します。 なお、ログイン権限は自動的に付与されます。[postgres@node1 ~]$ createuser -P testuser 新しいロールのためのパスワード: # 任意のパスワードを入力 もう一度入力してください: # 任意のパスワードを入力 新しいロールをスーパーユーザにしますか? (y/n)n 新しいロールに対してデータベースを作成する権限を与えますか? (y/n)y 新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n パスワード: # postgres のパスワードを入力
一般ユーザtestuserでデータベースを作成してみましょう。
データベースクラスタ /var/lib/pgsql/data 内のデータベースを見るには、「オブジェクト」の「データベース」をクリックします。
この時、3 のデータベースが既に存在しています。 これらは、データベースクラスタ初期化時(initdb 実行時)に自動的に作成されます。postgresがロール、データベース作成などのユーティリティでPostgreSQLへの接続を受け付けるデータベースで、template0, template1がこれから作成するデータベースの雛型データベースとなります。
「オブジェクト」の「データベースを作成」をクリックすると、データベースを作成する事ができます。ここでは以下のように設定します。
データベース作成項目 | 設定値 |
---|---|
データベース名 | testdb |
データベース所有者 | testuser |
文字エンコーディング | UTF8 |
テーブルスペース | pg_default |
データベース情報を入力して、「OK(O))」をクリックします。
データベースが新たに追加されました。
[postgres@node1 ~]$ createdb -O testuser testdb パスワード: # postgres のパスワードを入力
psql はデータベースに接続してSQLを実行するためのプログラムです。
「その他ツール」から「psql コマンドラインツールを実行」の「実行」をクリックします。
psql を起動すると、以下のターミナルが立ち上がります。 その際、パスワードの入力が求められます。サーバの登録時にデータベースのスーパーユーザpostgresに設定したパスワードを入力します。
psqlのプロンプトでデータベースのスーパーユーザは =# 、一般ユーザは => で違いがあります。 画面はスーパユーザがpostgresデータベースに接続している状態です。 なお、終了する際は、\q を入力します。 psql には SQL 以外にも psql 内のみで使える便利なバックスラッシュコマンド(メタコマンド)があります。 主なバックスラッシュコマンドは、以下のとおりです。その他のバックスラッシュコマンドは、psql を使っていく中で紹介していきます。
主なバックスラッシュコマンド | |
---|---|
コマンド | 意味 |
\? | コマンド一覧 |
\c databasename [username] | 新しい接続で他のデータベースに接続。ユーザ名も付けるとそのユーザで接続 |
\h [SQL] | SQL のヘルプ |
\d[t|i|s|v|S] | テーブル、インデックス、シーケンス、システムテーブルの一覧 |
\l | データベース一覧 |
\d [NAME] | 指定したテーブル、インデックス、シーケンスなどの定義を表示 |
\dT | データ型の一覧 |
\df | 関数の一覧 |
管理ツールで作成した testuser が一覧に表示されています。
続けて、\c コマンド を使って 先ほど作成したデータベース testdb に接続してみましょう。 その後、SET ROLE 文でロールをスーパーユーザpostgresから、一般ユーザ用のロールtestuserに変えてみましょう。RESET ROLE で元のロールであるスーパーユーザ postgres に戻れます。
-p オプションで接続ポートを指定します。
なお、-U オプションと -d オプションの値は、オプションとして指定せずに、psql コマンドの第一引数と第二引数に接続先データベースと接続ロールを指定することもできます。 以下の例では、Linuxユーザのpostgresがロールのtestuserとして、testdbに接続しています。[postgres@node1 ~]$ psql -d testdb -p 5432 -U testuser ユーザ testuser のパスワード: # testuser のパスワードを入力 psql (9.1.9) "help" でヘルプを表示します. testdb=>
CREATE TABLE employee ( number int, -- 社員番号 name text, -- 名前 position text, -- 役職 date_of_hire date -- 入社日 );\d で employee テーブルを確認してみましょう。
\d employeeSQLの基本となる4つの構文INSERT, SELECT, UPDATE, DELETEをそれぞれ実行して、データの投入から削除まで行います。 社員テーブル employee が定義できたら、INSERT 文で以下のデータを登録していきましょう。
INSERT INTO employee VALUES (1981352, '吉本 勘兵衛', 'staff', '1998-04-01'); INSERT INTO employee VALUES (1782822, '長崎 一郎', 'chief', '1978-10-01'); INSERT INTO employee VALUES (2081577, '山田 太郎', 'staff', '2008-04-01'); INSERT INTO employee VALUES (1851139, '大村 祐子', 'chief', '1985-04-01');テーブルへのデータの登録が済んだら、SELECT文で確認してみましょう。
SELECT * FROM employee;UPDATE 文でデータの更新を行いましょう。 社員番号1981352の吉本さんの役職が、マネージャ(manager)に昇進したと仮定して、データの更新を行っていきます。 注意しなければならないのは、WHERE 句で条件を指定しないとすべての行が更新されてしまいます。 吉本さんの社員番号を条件に指定しています。
UPDATE employee SET position = 'manager' WHERE number = 1981352;DELETE 文で削除を行いましょう。 社員番号1851139の大村さんが退職したと仮定してデータの削除を行います。 こちらも、UPDATE文の時と同じようにWHERE句で条件を絞りこんでから削除をします。
DELETE FROM employee WHERE number = 1851139;SELECT 文で確認してみましょう。
SELECT * FROM employee;
吉本さんがmanagerへ、大村さんが削除されている事がわかります。
SQL 基本 4 構文 | ||
---|---|---|
データの操作 | SQL | 構文例 |
登録 | INSERT 文 | INSERT INTO employee VALUES (1981352, ‘吉本 勘兵衛’, ‘staff’, ‘1998-04-01’); |
検索 | SELECT 文 | SELECT name FROM employee; |
更新 | UPDATE 文 | UPDATE employee SET position = ‘manager’ WHERE number = 1981352; |
削除 | DELECT 文 | DELETE FROM employee WHERE number = 1851139; |
今回はPowerGres Plusの導入方法と基本的な使い方を紹介しました。
次回は、オンラインバックアップとそのリカバリ方法をご紹介いたします。 通常のPostgreSQLでは復旧が不可能な場合でも、PowerGres Plusでは、独自機能のトランザクションログの二重化を利用して、簡単に復旧可能です。 いくつかの障害パターンをもとに、「PostgreSQLではできなくてPowerGres Plusではできること」をメインテーマに、体験記をお送りいたします。