6.3. Directory Server のバックアップ

Directory Server のバックアップには、以下が含まれます。
  • これらのデータベース内に格納されているデータを含むすべてのデータベースファイル
    注記
    Directory Server は、個別のデータベースのバックアップをサポートしません。
  • トランザクションログ
  • インデックス
バックアップとは対照的に、「データのエクスポート」 で説明されているように、データをエクスポートできます。エクスポート機能を使用して、LDAP Data Interchange Format (LDIF) 形式のサーバーからサブツリーなどの特定のデータをエクスポートします。
警告
バックアップ操作中にサーバーを停止しないでください。
Directory Server は、バックアップタスクを dirsrv ユーザーとして実行します。したがって、移行先ディレクトリーのパーミッションでは、このユーザーがファイルを作成できるようにする必要があります。

6.3.1. コマンドラインを使用した全データベースのバックアップ

Directory Server は、インスタンスの実行中またはオフライン時にデータベースのバックアップをサポートします。
重要
これらのメソッドはデータベースのみのバックアップを作成します。設定などの他の重要なファイルのバックアップに関する詳細は、「設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ」を参照してください。

6.3.1.1. サーバーの実行中にすべてのデータベースのバックアップ

6.3.1.1.1. dsconf backup create コマンドを使用した全データベースのバックアップ
dsconf backup create コマンドを使用して、全データベースをバックアップするタスクを自動的に作成します。
重要
データベースがオンラインバックアップから復元されると、Directory Server は changelog をクリーンアップします。したがって、オンラインバックアップを使用する場合は、データベースの復元後にレプリカを再初期化する必要があります。再初期化を回避するには、オフラインバックアップを使用します。
たとえば、すべてのデータベースのバックアップを作成するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup create
The backup create task has finished successfully
デフォルトでは、dsconf は、バックアップを /var/lib/dirsrv/slapd-instance_name/bak/ ディレクトリーの instance_name-time_stamp というサブディレクトリーに保存します。別の場所を指定するには、コマンドにディレクトリー名を追加します。
6.3.1.1.2. cn=tasks エントリーを使用した全データベースのバックアップ
Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリー用のコンテナーエントリーです。バックアップ操作を開始するには、cn=backup,cn=tasks,cn=config エントリーでタスクを作成します。
タスクエントリーを使用すると、サーバーの実行中にデータベースのバックアップを作成できます。
バックアップタスクエントリーには以下の属性が必要です。
  • cn: タスクの一意の名前を設定します。
  • nsDatabaseType: バックアップするデータベースのタイプを設定します。Directory Server は、この属性の ldbm database 値のみをサポートします。
バックアップタスクは、デフォルトとして別の宛先ディレクトリーを指定するなど、追加のパラメーターをサポートします (/var/lib/dirsrv/slapd-instance_name/bak/)。完全なリストは、『Red Hat Directory Server Configuration, Command, and File Reference』のcn=backupセクションを参照してください。
たとえば、すべてのデータベースをバックアップし、アーカイブをデフォルトのバックアップディレクトリーに保存するには、以下を実行します。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=example_backup,cn=export,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example_backup
nsDatabaseType: ldbm database
nsArchiveDir 属性を指定しないと、サーバーは /var/lib/dirsrv/slapd-instance_name/bak/ ディレクトリーの instance_name-time_stamp という名前のサブディレクトリーにバックアップを保存します。
タスクが完了すると、エントリーはディレクトリー設定から削除されます。

6.3.1.2. サーバーがオフライン時のすべてのデータベースのバックアップ

データベースのバックアップ時にサーバーがオフラインの場合は、dsctl db2bak コマンドを使用します。
  1. インスタンスを停止します。
    # dsctl instance_name stop
  2. データベースのバックアップを作成します。
    # dsctl instance_name db2bak
    db2bak successful
    注記
    dsctl db2bak コマンドは、dirsrv ユーザーとしてバックアップとして実行されます。したがって、インストール先ディレクトリーのパーミッションでは、このユーザーがファイルとディレクトリーを作成できるようにする必要があります。
    宛先ディレクトリーをコマンドに追加しないと、サーバーは、/var/lib/dirsrv/slapd-instance_name/bak/ ディレクトリーのサブディレクトリー instance_name-time_stamp にバックアップを保存します。
  3. インスタンスを起動します。
    # dsctl instance_name start

6.3.2. Web コンソールを使用した全データベースのバックアップ

Web コンソールを使用して、オンラインバックアップを実行できます。
重要
データベースがオンラインバックアップから復元されると、Directory Server は changelog をクリーンアップします。したがって、オンラインバックアップを使用する場合は、データベースの復元後にレプリカを再初期化する必要があります。再初期化を回避するには、オフラインバックアップを使用します。
Web コンソールを使用してインスタンスのデータベースをすべてバックアップするには、以下を実行します。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Actions ボタンをクリックして、Manage Backup を選択します。
  4. Create Backup をクリックします。
  5. バックアップの作成日時を示すタイムスタンプなど、バックアップの名前を入力します。
  6. Create Backup をクリックします。
サーバーは、バックアップを /var/lib/dirsrv/slapd-instance_name/bak/ ディレクトリー内の指定した名前のサブディレクトリーに保存します。

6.3.3. 設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ

Directory Server に統合されているバックアップメカニズムは、データベースのみのバックアップを作成します。ただし、/etc/dirsrv/slapd-instance_name/ ディレクトリーには追加のファイルが保存されています。これらのファイルは、たとえば、ハードウェア障害後に別のサーバー上でインスタンスを復元するのに必要になります。
注記
Web コンソールで設定ディレクトリーのバックアップはサポートされていません。

例6.2 /etc/dirsrv/slapd-instance_name/ ディレクトリーのバックアップ方法

/etc/dirsrv/slapd-instance_name/ のコンテンツをバックアップするには、ディレクトリーをコピーするか、アーカイブファイルに保存します。たとえば、/etc/dirsrv/slapd-instance_name/ ディレクトリーのコンテンツを /root/config_slapd-instance_name_time_stamp.tar.gz ファイルに保存するには、次のコマンドを実行します。
# cd /etc/dirsrv/
# tar -zcvf /root/config_slapd-instance_name_$(date +%Y-%m-%d_%H-%M-%S).tar.gz slapd-instance_name/
重要
バックアップ時に、証明書データベースを更新しないでください。更新してしまうと、バックアップ内のデータベースで一貫性がなくなる可能性があります。

6.3.4. グループのメンバーが Directory Server をバックアップすることの許可、およびグループメンバーの 1 つとしてのバックアップの実行

グループのメンバーに、インスタンスをバックアップしバックアップを実施するパーミッションを設定できます。バックアップスクリプトまたは cron ジョブに cn=Directory Manager の認証情報を設定する必要がなくなるため、セキュリティーが向上します。また、グループを変更して、バックアップのパーミッションを簡単に許可し、取り消しすことができます。

6.3.4.1. グループが Directory Server をバックアップすることの許可

この手順を使用して、cn=backup_users,ou=groups,dc=example,dc=com グループを追加し、このグループのメンバーがバックアップタスクを作成するのを許可します。

手順

  1. cn=backup_users,ou=groups,dc=example,dc=com グループを作成します。
    # dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
  2. cn=backup_users,ou=groups,dc=example,dc=com グループのメンバーがバックアップタスクを作成するのを許可するアクセス制御手順 (ACI) を追加します。
    # ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com
    
    dn: cn=config
    changetype: modify
    add: aci
    aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*")
     (version 3.0 ; acl "permission: Allow backup_users
      group to create backup tasks" ; allow (add, read, search) groupdn
      = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
    -
    add: aci
    aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass")
     (version 3.0 ; acl "permission: Allow backup_users group
      to access bakdir attribute" ; allow (read,search) groupdn
      = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
  3. ユーザーを作成します。
    1. ユーザーアカウントを作成します。
      # dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
    2. ユーザーアカウントのパスワードを設定します。
      # dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
  4. uid=example,ou=People,dc=example,dc=com ユーザーを cn=backup_users,ou=groups,dc=example,dc=com グループに追加します。
    # dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group add_member backup_users uid=example,ou=People,dc=example,dc=com

検証

  • cn=config エントリーに設定された ACI を表示します。
    # ldapsearch -o ldif-wrap=no -LLLx -D "cn=directory manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base
    dn: cn=config
    aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
    aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass")(version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)
    ...

6.3.4.2. 通常のユーザーとしてのバックアップの実行

cn=Directory Manager ではなく、通常のユーザーとしてバックアップを実行できます。

前提条件

手順

  • 以下の方法のいずれかを使用してバックアップタスクを作成します。
    • dsconf backup create コマンドの使用:
      # dsconf -D uid=example,ou=People,dc=example,dc=com ldap://server.example.com backup create
    • タスクの手動での作成:
      # ldapadd -D uid=example,ou=People,dc=example,dc=com -W -H ldap://server.example.com
      
      dn: cn=backup-2021_07_23_12:55_00,cn=backup,cn=tasks,cn=config
      changetype: add
      objectClass: extensibleObject
      nsarchivedir: /var/lib/dirsrv/slapd-instance_name/bak/backup-2021_07_23_12:55_00
      nsdatabasetype: ldbm database
      cn: backup-2021_07_23_12:55_00

検証

  • バックアップが作成されたことを確認します。
    # ls -l /var/lib/dirsrv/slapd-instance_name/bak/
    total 0
    drwx------. 3 dirsrv dirsrv 108 Jul 23 12:55 backup-2021_07_23_12_55_00
    ...