第6章 Directory Database への入力
データベースには、Red Hat Directory Server が管理するディレクトリーデータが含まれます。
6.1. データのインポート
Directory Server には、以下を行ってデータベースにデータを入力できます。
- データのインポート重要データをインポートするには、インポートする LDIF ファイルを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーに保存する必要があります。Directory Server は、デフォルトでPrivateTmp
systemd ディレクティブを使用します。その結果、LDIF ファイルを /tmp/ または/var
システムディレクトリーにエクスポートすると、Directory Server はインポート時にこれらの LDIF ファイルを認識しません。/tmp/
PrivateTmp
の詳細は、systemd.exec (5)
の man ページを参照してください。 - レプリケーションのデータベースの初期化
次の表に、データベースのインポートと初期化の違いを示します。
表6.1 インポート方法の比較
動作 | インポート | データベースの初期化 |
---|---|---|
データベースの上書き | いいえ | はい |
LDAP 操作 | 追加、変更、削除 | 追加のみ |
パフォーマンス | より時間がかかる | 速い |
パーティション特長 | すべてのパーティションで機能 | ローカルパーティションのみ |
サーバー障害への応答 | ベストエフォート (障害が発生した時点までに行われたすべての変更が残る) | アトミック (障害発生後にすべての変更が失われる) |
LDIF ファイルの場所 | Web コンソールへのローカル | Web コンソールまたはローカルサーバーへのローカル |
設定情報 (cn=config) をインポートする | はい | いいえ |
6.1.1. インポート中の EntryUSN 初期値の設定
エントリーがサーバーからエクスポートされ、別のサーバーにインポートされた場合には、エントリーの更新シーケンス番号 (USN) が保持されません。「更新シーケンス番号でデータベースへの変更の追跡」で説明されているように、エントリー USN はローカルサーバーで発生する操作に割り当てられるため、これらの USN を別のサーバーにインポートすることは意味がありません。
ただし、データベースのインポート時やデータベースの初期化時にエントリーに USN 値を設定することが可能です (レプリカがレプリケーションに対して初期化される場合など)。これは、
nsslapd-entryusn-import-initval
パラメーターを設定します。これにより、インポートされたすべてのエントリーの USN が開始されます。
nsslapd-entryusn-import-initval
には 2 つの値を指定することができます。
- 整数。インポートされたすべてのエントリーに使用される明示的な開始番号です。
- next。つまり、インポートされたエントリーはすべて、インポート操作の前にサーバー上にあった最大のエントリー USN 値を、1 つずつインクリメントして使用します。
nsslapd-entryusn-import-initval
が設定されていない場合、すべてのエントリー USN はゼロで始まります。
例6.1 nsslapd-entryusn-import-initval
パラメーターの仕組み
たとえば、インポートまたは初期化操作の前にサーバーの最大値が 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=user_name,ou=people,dc=example,dc=com entryusn: 1001 ...
エントリー USN の初期値を設定するには、
nsslapd-entryusn-import-initval
パラメーターを、データをインポートするサーバーまたは初期化を実行するサプライヤーサーバーに追加します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-entryusn-import-initval=next
注記
マルチサプライヤーレプリケーションでは、
nsslapd-entryusn-import-initval
パラメーターはサーバー間で複製 されません。つまり、値は、レプリカの初期化に使用しているすべてのサプライヤーサーバーに対して設定する必要があります。
たとえば、
Supplier1
ホストの nsslapd-entryusn-import-initval
が next に設定され、レプリカの初期化に使用される場合は、インポートされたエントリーのエントリー USN は最も高い値に 1 が追加されます。Supplier2
ホストに nsslapd-entryusn-import-initval
が設定されておらず、レプリカの初期化に使用される場合は、Supplier1
および Supplier2
にマルチサプライヤーレプリカ合意がある場合でも、インポートされたエントリーのすべてのエントリー USN はゼロで始まります。
6.1.2. コマンドラインでのインポート
Directory Server は、インスタンスの実行中またはオフライン時にデータのインポートをサポートします。
- インスタンスが実行している場合には、以下のいずれかの方法を使用します。
- dsconf backend import コマンドを使用します。「dsconf backend import コマンドを使用したインポート」を参照してください。
- cn=tasks エントリーを作成します。「cn=tasks エントリーを使用したデータのインポート」を参照してください。
- インスタンスがオフラインの場合は、dsctl ldif2db コマンドを使用します。「サーバーがオフライン時のデータのインポート」を参照してください。
警告
インポート操作を開始すると、Directory Server はまずデータベースから既存のデータをすべて削除し、その後 LDIF ファイルからデータをインポートします。LDIF ファイルが存在しない場合など、インポートに失敗すると、サーバーは以前のデータをデータベースから削除しています。
インポート操作に使用される LDIF ファイルは、
UTF-8
文字セットエンコーディングを使用する必要があります。インポート操作は、データをローカル文字セットエンコーディングから UTF-8
に変換しません。また、インポートされたすべての LDIF ファイルにルート接尾辞エントリーが含まれている必要があります。
Directory Server は、
dirsrv
ユーザーとしてインポート操作を実行します。したがって、LDIF ファイルのパーミッションにより、このユーザーがファイルの読み取りを許可する必要があります。
6.1.2.1. サーバーの実行中にデータのインポート
本セクションでは、Directory Server の実行中にデータをインポートする方法を説明します。
6.1.2.1.1. dsconf backend import コマンドを使用したインポート
dsconf backend import コマンドを使用して、LDIF ファイルからデータをインポートするタスクを自動的に作成します。たとえば、
/var/lib/dirsrv/slapd-instance_name/ldif/instance_name-database_name-time_stamp.ldif
ファイルを userRoot
データベースにインポートするには、以下のコマンドを実行します。
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- LDIF ファイルをインポートします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend import userRoot /var/lib/dirsrv/slapd-instance_name/ldif/instance_name-database_name-time_stamp.ldif The import task has finished successfully
dsconf backend import コマンドは、特定の接尾辞を除外するなど、追加オプションに対応します。利用可能なオプションをすべて表示するには、以下を入力します。# dsconf ldap://server.example.com backend import --help
6.1.2.1.2. cn=tasks エントリーを使用したデータのインポート
Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリー用のコンテナーエントリーです。インポート操作を開始するには、cn=import,cn=tasks,cn=config エントリーにタスクを作成します。
インポートタスクエントリーには以下の属性が必要です。
cn
: タスクの一意の名前を設定します。nsFilename
: インポートする LDIF ファイルの名前を設定します。nsInstance
: ファイルをインポートするデータベースの名前を設定します。
インポートタスクは、接尾辞を除外するための追加パラメーターをサポートします。完全な一覧は、『Red Hat Directory Server の設定、コマンド、およびファイルリファレンス』 の 『cn=import』 セクションを参照してください。
たとえば、
/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルの内容を userRoot
データベースにインポートするタスクを追加するには:
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インポートタスクを追加します。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: cn=example_import,cn=import,cn=tasks,cn=config changetype: add objectclass: extensibleObject cn: example_import nsFilename: /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif nsInstance: userRoot
タスクが完了すると、エントリーはディレクトリー設定から削除されます。
6.1.2.2. サーバーがオフライン時のデータのインポート
データのインポート時にサーバーがオフラインの場合は、dsctl ldif2db コマンドを使用します。
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インスタンスを停止します。
# dsctl instance_name stop
- LDIF ファイルからデータをインポートします。たとえば、
/var/lib/dirsrv/slapd-instance_name/ldif/example.ldif
ファイルをuserRoot
データベースにインポートするには、以下を実行します。# dsctl instance_name ldif2db userroot /var/lib/dirsrv/slapd-instance_name/ldif/example.ldif OK group dirsrv exists OK user dirsrv exists [17/Jul/2018:13:42:42.015554231 +0200] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000 ... [17/Jul/2018:13:42:44.302630629 +0200] - INFO - import_main_offline - import userroot: Import complete. Processed 160 entries in 2 seconds. (80.00 entries/sec) ldif2db successful
警告コマンドで指定したデータベースが、LDIF ファイルに含まれる接尾辞と一致しない場合は、データベースに含まれるすべてのデータが削除され、インポートに失敗します。 - インスタンスを起動します。
# dsctl instance_name start
6.1.3. Web コンソールを使用したデータのインポート
Web コンソールを使用して LDIF ファイルからデータをインポートするには、以下を行います。
- 接尾辞が存在しない場合は作成します。詳細については、「接尾辞の作成」 を参照してください。
- インポートする LDIF に接尾辞エントリーを追加するステートメントが含まれていない場合は、「ルートエントリーの作成」 で説明されているように、このエントリーを手動で作成します。
- インポートする LDIF ファイルを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーに保存します。 - Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Database メニューを開きます。
- 接尾辞エントリーを選択します。
- Suffix Tasks をクリックし、Initialize Suffix を選択します。
- インポートする LDIF ファイルを選択するか、ファイルへの完全パスを入力します。
- Yes, I am sure を選択し、Initialize Database をクリックして確定します。