-
Language:
日本語
-
Language:
日本語
Red Hat Training
A Red Hat training course is available for Red Hat Directory Server
第6章 Directory Database への入力
データベースには、Red Hat Directory Server が管理するディレクトリーデータが含まれます。
6.1. データのインポート
Directory Server には、データをインポートする(Directory Server Console またはインポートツールを使用)、またはレプリケーション用にデータベースを初期化することで、以下のいずれかの方法でデータベースにデータを作成できます。
表6.1「インポート方法の比較」では、インポートとデータベースの初期化の相違点を説明します。
表6.1 インポート方法の比較
動作 | インポート | データベースの初期化 |
---|---|---|
データベースの上書き | いいえ | はい |
LDAP 操作 | 追加、変更、削除 | 追加のみ |
パフォーマンス | より時間がかかる | 速い |
パーティション特長 | すべてのパーティションで機能 | ローカルパーティションのみ |
サーバー障害への応答 | ベストエフォート (障害が発生した時点までに行われたすべての変更が残る) | アトミック (障害発生後にすべての変更が失われる) |
LDIF ファイルの場所 | コンソールへのローカル | サーバーに対するコンソールまたはローカルへのローカル |
設定情報 (cn=config) をインポートする | Yes | いいえ |
6.1.1. インポート中の EntryUSN 初期値の設定
エントリーがサーバーからエクスポートされ、別のサーバーにインポートされた場合には、エントリーの更新シーケンス番号 (USN) が保持されません。「更新シーケンス番号でデータベースへの変更の追跡」で説明されているように、エントリー USN はローカルサーバーで発生する操作に割り当てられるため、これらの USN を別のサーバーにインポートすることは意味がありません。
ただし、データベースのインポート時やデータベースの初期化時にエントリーに USN 値を設定することが可能です (レプリカがレプリケーションに対して初期化される場合など)。これは、
nsslapd-entryusn-import-initval
属性を設定して行います。これにより、インポートされたすべてのエントリーの USN が開始されます。
nsslapd-entryusn-import-initval
には 2 つの値を指定することができます。
- 整数。インポートされたすべてのエントリーに使用される明示的な開始番号です。
- 次に、インポートされたすべてのエントリーは、インポート操作前にサーバー上の最も大きなエントリー USN 値を使用し、1 つずつ増分します。
nsslapd-entryusn-import-initval
が設定されていない場合、すべてのエントリー USN はゼロで始まります。
たとえば、インポートまたは初期化操作の前にサーバーの最大値が 1000 で、
nsslapd-entryusn-import-initval
の値が next の場合、インポートされたすべてのエントリーには 1001 の USN が割り当てられます。
# ldapsearch -D "cn=Directory Manager" -W -p 389 -h server.example.com -x "(cn=*)" entryusn dn: dc=example,dc=com entryusn: 1001 dn: ou=Accounting,dc=example,dc=com entryusn: 1001 dn: ou=Product Development,dc=example,dc=com entryusn: 1001 ... dn: uid=jsmith,ou=people,dc=example,dc=com entryusn: 1001 ...
エントリー USN の初期値を設定するには、データをインポートするサーバーまたは初期化を実行するマスターサーバーに
nsslapd-entryusn-import-initval
属性を追加するだけです。
# ldapmodify -D "cn=Directory Manager" -W -x -D "cn=directory manager" -W -p 389 -h server.example.com -x dn: cn=config changetype: modify add: nsslapd-entryusn-import-initval nsslapd-entryusn-import-initval: next
注記
マルチマスターレプリケーションでは、
nsslapd-entryusn-import-initval
属性はサーバー間で 複製されません。つまり、値は、レプリカの初期化に使用しているすべてのサプライヤーサーバーに対して設定する必要があります。
たとえば、Supplier1 に
nsslapd-entryusn-import-initval
が next に設定され、レプリカの初期化に使用される場合は、インポートされたエントリーのエントリー USN は最も高い値に 1 が追加されます。Supplier2 に nsslapd-entryusn-import-initval
が設定されておらず、レプリカの初期化に使用される場合は、Supplier1 および Supplier 2 にマルチマスターレプリカ合意がある場合でも、インポートされたエントリーのすべてのエントリー USN はゼロで始まります。
6.1.2. コンソールからのデータベースのインポート
Directory Server コンソールからインポート操作を実行すると、ldapmodify 操作はデータを追加し、エントリーの変更や削除を行います。この操作は、Directory Server が管理するすべてのデータベースと、Directory Server が設定したデータベースリンクを持つリモートデータベースで実行されます。
インポート操作は、Directory Server コンソールに対してローカルとなるサーバーインスタンスまたは別のホストマシン(リモートインポート操作)で実行できます。
インポートを実行するには、Directory Manager としてログインしている必要があります。
注記
インポート操作に使用される LDIF ファイルは、UTF-8 文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8 文字セットエンコーディングに変換しません。
警告
インポートされたすべての LDIF ファイルには、root 接尾辞も含まれている必要があります。
Directory Server コンソールからデータをインポートするには、以下を実行します。
- Tasks タブを選択します。画面の下部までスクロールし、Import Database を選択します。または、Configuration タブを開き、Console メニューから Import を選択します。
- Import Database ダイアログボックスで、LDIF ファイル フィールドでインポートする LDIF ファイルへの完全パスを入力するか、Browse をクリックしてインポートするファイルを選択します。コンソールがマシンのリモートで実行している場合、フィールド名は LDIF ファイルとして表示されます(コンソールを実行するマシン上)。ファイルを参照する場合、Directory Server ホストの現在のディレクトリーは参照されませんが、コンソールを実行しているマシンのファイルシステムも参照しません。リモートコンソールを使用してデータベースをインポートする場合 は、データベースへの相対パスを使用しないでください。リモートインポートでは、ファイルに相対パス が指定されている場合に Cannot write to file... というエラーで操作に失敗します。リモートインポート操作には常に絶対パスを使用します。
- オプション ボックスで、以下のオプションのいずれかまたは両方を選択します。
- のみを追加します。LDIF ファイルには、デフォルトの追加手順に加えて、変更および削除手順を含めることができます。サーバーが add 以外の操作を無視するには、Add only チェックボックスを選択します。
- Error に進みます。エラーが発生した場合でもインポートを続行するには、サーバーの Continue on error チェックボックスを選択します。たとえば、このオプションを使用して、新しいものに加えて、データベースにすでに存在するエントリーが含まれる LDIF ファイルをインポートします。サーバーノートでは、すべての新規エントリーの追加中に rejects ファイルの既存のエントリーがあります。
- File for Rejects フィールドに、サーバーがインポートできないすべてのエントリーを記録するファイルへの完全パスを入力するか、Browse をクリックして拒否が含まれるファイルを選択します。拒否は、データベースにインポートできないエントリーです。たとえば、サーバーは、データベースにすでに存在するエントリーや、親オブジェクトのないエントリーをインポートできません。コンソールは、サーバーによって送信されたエラーメッセージが rejects ファイルに書き込みます。このフィールドを空白のままにすると、サーバーは拒否されたエントリーを記録しません。
サーバーはインポートを実行し、インデックスも作成します。
注記
末尾のスペースは、リモートコンソールのインポート時に破棄されますが、ローカルコンソールまたは ldif2db インポート操作時に保持されます。
6.1.3. コンソールからのデータベースの初期化
データベース内の既存のデータは、データベースを初期化することで上書きできます。
Directory Manager (root DN)を除き、ルートエントリーが含まれる LDIF ファイルをデータベースにインポートできないため、データベースを初期化するために Directory Manager としてログインしている必要があります。Directory Manager のみが、dc =example,dc=com などのルートエントリーにアクセスできます。
警告
LDIF ファイルからデータベースを初期化する場合は、データを復元しない限り、o=NetscapeRoot 接尾辞を上書きしないように注意してください。それ以外の場合は、データベースの初期化により情報が削除され、Directory Server の再インストールが必要になる場合があります。
Directory Server コンソールを使用してデータベースを初期化するには、以下を実行します。
- Configuration タブを選択します。
- 左側のナビゲーションペインで Data tree を展開します。初期化するデータベースの接尾辞を展開し、データベース自体をクリックします。
- データベースを右クリックし、Initialize Database を選択します。または、Object メニューから Initialize Database を選択します。
- LDIF file フィールドにインポートする LDIF ファイルへの完全パスを入力するか、Browse をクリックします。
- コンソールが、インポートされているファイルのマシンから実行中の場合は、OK をクリックして、即座にインポートに進みます。Console がマシンリモートから LDIF ファイルを含むサーバーに実行している場合は、以下のオプションのいずれかを選択して OK をクリックします。
- ローカルマシンからいる。LDIF ファイルがローカルマシンにあることを示します。
- サーバーマシン から。LDIF ファイルがリモートサーバーにあることを示します。
デフォルトの LDIF ディレクトリーは/var/lib/dirsrv/slapd-instance/ldif
です。
6.1.4. コマンドラインからのインポート
コマンドラインでデータをインポートする方法は 4 つあります。
- ldif2db の使用。このインポートメソッドはデータベースの内容を上書きし、サーバーを停止する必要があります。「ldif2db コマンドラインユーティリティーを使用したインポート」 を参照してください。
- Using ldif2db.pl.このインポート方法は、サーバーの実行中にデータベースの内容を上書きします。「ldif2db.pl Perl スクリプトを使用したインポート」 を参照してください。
- ldif2ldap の使用。このメソッドは、LDAP を介して LDIF ファイルを追加します。このメソッドは、全データベースにデータを追加する場合に便利です。「ldif2ldap コマンドラインスクリプトを使用したインポート」 を参照してください。
- cn=tasks エントリーの作成。このメソッドは、インポート操作を自動的に起動する一時タスクエントリーを作成します。これは、ldif2db の実行に似ています。「cn=tasks エントリーを使用したインポート」 を参照してください。
注記
インポート操作に使用される LDIF ファイルは、UTF-8 文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8 文字セットエンコーディングに変換しません。
警告
インポートされたすべての LDIF ファイルには、root 接尾辞も含まれている必要があります。
注記
暗号化したデータベースをインポートするには、スクリプトで -E オプションを使用します。詳細は、「暗号化したデータベースのエクスポートおよびインポート」 を参照してください。
6.1.4.1. ldif2db コマンドラインユーティリティーを使用したインポート
ldif2db スクリプトは、指定したデータベースのデータを上書きします。また、このスクリプトでは、インポートの開始時に Directory Server を停止する必要があります。
デフォルトでは、スクリプトは最初に保存してから、既存の o=NetscapeRoot 設定情報を、インポートするファイルの o=NetscapeRoot 設定情報とマージします。
警告
このスクリプトは、データベースのデータを上書きします。
LDIF をインポートするには、以下を行います。
- サーバーを停止します。
# systemctl stop dirsrv@instance
- ldif2db コマンドラインスクリプトを実行します。
# ldif2db -Z instance_name -n Database1 -i /var/lib/dirsrv/slapd-instance/ldif/demo.ldif -i /var/lib/dirsrv/slapd-instance/ldif/demo2.ldif
この例で使用されるパラメーターの詳細は、Red 『Hat Directory Server の設定、コマンド、およびファイルリファレンス のldif2db
スクリプトの説明を参照してください』。警告-n オプションで指定したデータベースが LDIF ファイルに含まれる接尾辞と一致しない場合は、データベースに含まれるすべてのデータが削除され、インポートに失敗します。データベース名が間違っていることがないことを確認してください。 - サーバーを起動します。
# systemctl start dirsrv@instance
6.1.4.2. ldif2db.pl Perl スクリプトを使用したインポート
ldif2db スクリプトと同様に、ldif2db.pl スクリプトは、指定されたデータベースのデータを上書きします。このスクリプトでは、インポートを実行するためにサーバーを実行する必要があります。
警告
このスクリプトは、データベースのデータを上書きします。
ldif2db.pl スクリプトを実行します。
# ldif2db.pl -Z instance_name -D "cn=Directory Manager" -w secret -i /var/lib/dirsrv/slapd-instance/ldif/demo.ldif -n Database1
この例で使用されるパラメーターの詳細は、Red 『Hat Directory Server の設定、コマンド、およびファイルリファレンス の
ldif2db.pl
スクリプトの説明を参照してください』。
注記
スクリプトを実行するには root 権限は必要ありませんが、Directory Manager として認証する必要があります。
6.1.4.3. ldif2ldap コマンドラインスクリプトを使用したインポート
ldif2ldap スクリプトは、LDAP を介して LDIF ファイルを追加します。このスクリプトを使用すると、データはすべてのディレクトリーデータベースに同時にインポートされます。ldif2ldap を使用してインポートするには、サーバーが稼働している必要があります。
ldif2ldap を使用して LDIF をインポートするには、以下を実行します。
[root@server ~]# ldif2ldap -Z instance_name -D "cn=Directory Manager" -w secretpwd /var/lib/dirsrv/slapd-instance/ldif/demo.ldif
ldif2ldap スクリプトでは、管理ユーザーの DN、管理ユーザーのパスワード、およびインポートする LDIF ファイルの絶対パスおよびファイル名が必要です。
この例で使用されるパラメーターの詳細は、Red 『Hat Directory Server の設定、コマンド、およびファイルリファレンス の
ldif2ldap
スクリプトの説明を参照してください』。
6.1.4.4. cn=tasks エントリーを使用したインポート
Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリーのコンテナーエントリーです。複数の共通ディレクトリータスクには、cn=tasks,cn=config の下にコンテナーエントリーがあります。一時タスクエントリーは、cn=import,cn=tasks,cn=config の下に作成し、インポート操作を開始できます。
ldif2db および ldif2db.pl スクリプトと同様に、cn=tasks のインポート操作はデータベースのすべての情報を上書きします。
このタスクエントリーには以下の 3 つの属性が必要です。
- 一意の名前(
cn
) - インポートする LDIF ファイルのファイル名(
nsFilename
) - ファイルをインポートするデータベースの名前(
nsInstance
)
ldif2db および ldif2db.pl スクリプトで、-
s
オプションおよび -x
オプションと同様に、インポートを包含または除外する接尾辞の DN を指定することもできます。
エントリーは、「ldapmodify を使用したエントリーの追加」 で説明されているように ldapmodify を使用して追加されます。以下に例を示します。
# ldapmodify -a
-D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example import,cn=import,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example import
nsFilename: /home/files/example.ldif
nsInstance: userRoot
nsIncludeSuffix: ou=People,dc=example,dc=com
nsExcludeSuffix: ou=Groups,dc=example,dc=com
タスクが完了するとすぐに、エントリーはディレクトリー設定から削除されます。
この例で使用される属性と、このエントリーに設定できるその他の属性の詳細は、Red Hat Directory Server 設定、コマンド、およびファイルリファレンス の cn=import,cn=tasks,cn=config エントリーの説明を参照してください。『』