Sun Java 徽标     上一章      目录      索引      下一章     

Sun 徽标
Sun Java(TM) System Directory Server 5 2004Q2 管理指南 

第 4 章
备份和恢复数据

目录服务器管理的数据经常进行批量导入。Directory Server 提供导入和导出全部后缀的工具。它还提供用于一次备份所有后缀和从备份恢复所有数据的工具。

您可以使用纯文本 LDAP 数据交换格式 (LDIF) 备份和恢复数据。

本章说明备份和恢复目录数据需要执行的以下步骤:


如果您运行的是 Directory Server 的多个版本,请注意,本章中的所有示例均假设默认版本为 Directory Server 5.2。如果不是这样,则必须运行一次以下命令或者将 5.2 设为默认版本:

# /usr/sbin/directoryserver -d 5.2

或者每次运行 directoryserver 命令时都要包括 -useversion 选项,以便指定版本,例如:

# /usr/sbin/directoryserver -useversion 5.2 ldif2db ...



设置后缀只读模式

在 Directory Server 上执行特定的导出或备份操作前,可在任何后缀上启用只读模式,以确保在给定时间具有其内容状态的可靠图像。另外,在执行导入或恢复操作前,必须确保受操作影响的后缀并处于只读模式。

在执行导出或备份操作前,Directory Server Console 和命令行公用程序不会自动将目录置于只读模式,因为这样会使目录无法更新。不过,如果具有多主配置,则可在一个服务器上启用只读模式,而其他主副本上的数据将保持可写状态。

要将后缀设为只读,请执行“设置访问权限和引用”中所述的步骤。换句话说,可将整个目录服务器设为不可写入,如“设置全局只读模式”中所述。


导入数据

Directory Server 提供了两种导入数据的方法:

这两种方法都可以通过 Directory Server Console 和使用命令行公用程序实施。


导入的所有 LDIF 文件必须使用 UTF-8 字符集编码。

导入 LDIF 时,父条目必须存在于目录中或首先从文件添加。初始化后缀时,LDIF 文件必须包含根条目和相应后缀的所有目录树节点。


下表显示了导入和初始化之间的差异:

表4-1导入数据与初始化后缀的比较

比较的域

导入数据

初始化后缀

覆盖内容

LDAP 操作

添加、修改、删除

只添加

性能

较慢

快速

响应于服务器故障

最佳努力(保留该故障点的所有更改)

全部毁坏(发生故障后,丢失所有更改)

LDIF 文件位置

在客户机上

本地到客户机或本地到服务器

导入配置信息 (cn=config)

导入 LDIF 文件

执行导入操作时,Directory Server Console 执行 ldapmodify 操作以向目录中添加新条目。条目在 LDIF 文件中指定,可能也包含更新语句以修改或删除现有条目,这是导入操作的一部分。

导入条目的目标,可以是 Directory Server 管理的任何后缀以及在配置中定义的任何已链接的后缀或已链接的子后缀。如同添加条目的任何其他操作一样,服务器将在导入条目时对所有新的条目编制索引。

使用控制台导入 LDIF

必须以目录管理员或管理员的身份登录以执行导入操作:

  1. 在 Directory Server Console 的顶级“任务”选项卡上,滚动到选项卡的底部,然后单击“从 LDIF 导入”旁边的按钮。
  2. 显示“导入 LDIF”对话框。

  3. 在“导入 LDIF”对话框的“LDIF 文件”字段中,输入要导入的 LDIF 文件的完整路径,或单击“浏览”以选择本地文件系统中的文件。
  4. 如果正在访问远程计算机上的目录,该字段名会显示为 “LDIF 文件(在控制台计算机上)”。此标签提示您正在浏览的是本地文件系统,而不是远程目录服务器计算机上的文件系统。

  5. 按照要求设置下列选项:
    1. “只添加”—LDIF 文件除了包含默认的添加指令外,还可以包含修改和删除指令。如果希望控制台仅执行添加指令而忽略 LDIF 文件中的所有其他指令,请选中此复选框。
    2. “出错时继续”—如果希望控制台即便在出现错误时也能继续导入,请选中此复选框。例如,如果正在导入的 LDIF 文件包含后缀中已有的条目,则可使用此选项。控制台会记录此类错误,如执行导入操作时拒绝文件中现有的条目。
    3. 如果未选中此复选框,则在遇到第一个错误后导入操作将停止。LDIF 文件中之前的所有条目都已经成功导入,并将保留在目录中。

  6. 在“拒绝的文件”字段中,输入要控制台记录所有无法导入条目的文件的完整路径,或单击“浏览”以选择本地文件系统中的文件。
  7. 例如,服务器无法导入目录中已经存在的条目或者没有父对象的条目。控制台将在拒绝文件中写入服务器发送的错误消息。

    如果不填充该字段,服务器将不记录被拒绝的条目。

  8. 单击“确定”开始执行导入操作。
  9. Directory Server Console 显示一个对话框,对话框中包含操作的状态和所有发生的错误的文本。如果“拒绝的文件”不为空,则所有错误消息也将写入到已命名的文件中。

从命令行导入 LDIF

directoryserver ldif2ldap 命令将通过 LDAP 导入 LDIF 文件并执行它包含的所有操作。使用此命令将数据同时导入所有目录后缀。为了使用 ldif2ldap 导入,服务器必须正在运行。

该命令的完整路径为:

 

# /usr/sbin/directoryserver -s server ID ldif2ldap

以下示例使用 ldif2ldap 命令执行导入。您无需具有运行此命令的 root 特权,但必须以具有 root 权限的用户身份(如目录管理员)进行验证。最后一个参数指定要导入的 LDIF 文件的名称。

# /usr/sbin/directoryserver -s example ldif2ldap \
  -D "cn=Directory Manager" -w password \
  -f /var/opt/mps/serverroot/slapd-example/ldif/demo.ldif

有关使用此命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "ldif2ldap"

初始化后缀

初始化后缀用 LDIF 文件的内容覆盖后缀中的现有数据,该 LDIF 文件仅包含用于添加的条目。


警告

如果您正在管理的服务器是 Configuration Directory Server,从 LDIF 文件初始化后缀时,注意不要覆盖 o=NetscapeRoot 后缀,除非正在恢复数据。否则,将删除要求重新安装所有 Sun Java System 服务器的信息。


为初始化后缀,必须被验证为目录管理员或管理员。出于安全考虑,只有目录管理员和管理员具有访问后缀根条目的权限,例如 dc=example,dc=com。所以,只有这些身份可以导入包含根条目的 LDIF 文件。

从控制台初始化后缀


警告

该过程覆盖后缀中的数据。


  1. 在 Directory Server Console 的顶级“配置”选项卡上,展开“数据”节点,显示要初始化的后缀。
  2. 右键单击后缀节点,从弹出菜单中选择“初始化”。或者,可以选择后缀节点,然后从“对象”菜单中选择“初始化”。显示“初始化后缀”对话框。
  3. 在 “LDIF 文件”字段中,输入要用于初始化的 LDIF 文件的完整路径,或单击“浏览”在计算机上找到该文件。
  4. 如果操作的是导入文件的本地计算机的控制台,则可跳到第 6 步。如果操作的是包含 LDIF 文件的服务器的远程计算机的控制台,则选择下列选项之一:
  5. 在控制台上。表明该 LDIF 文件位于正在运行控制台的计算机上。在这种情况下,您可以浏览该文件。

    在服务器上。表明 LDIF 文件位于远程服务器上。在这种情况下,浏览按钮处于禁用状态。默认情况下,控制台在以下目录中查找该文件:

    ServerRoot/slapd-server ID/ldif

  6. 单击“确定”。
  7. 确定您要覆盖后缀中的数据。将继续进行后缀初始化,同时在对话框中报告所有错误。

使用 ldif2db 命令初始化后缀

directoryserver ldif2db 命令初始化后缀并覆盖现有数据。此命令要求您在继续进行导入操作前关闭服务器。

默认情况下,先保存该命令,然后将任何现有的 o=NetscapeRoot 配置信息与所导入文件中的 o=NetscapeRoot 配置信息合并。


警告

该命令覆盖后缀中的数据。


要在导入 LDIF 的同时停止服务器,请执行以下操作:

  1. 从命令行以 root 用户身份,用以下命令停止服务器:

     

    # /usr/sbin/directoryserver -s server ID stop

  2. 运行导入命令:

     

    # /usr/sbin/directoryserver -s server ID ldif2db ...

  3. 使用以下命令启动服务器:

     

    # /usr/sbin/directoryserver -s server ID start

以下示例使用 ldif2db 命令将两个 LDIF 文件导入到一个后缀中。

/usr/sbin/directoryserver -s example ldif2db -n Database1 \
 -i /var/opt/mps/serverroot/slapd-example/ldif/demo.ldif \
 -i /var/opt/mps/serverroot/slapd-example/ldif/demo2.ldif

表 4-2 在示例中使用的 ldif2db 选项的说明

选项

说明

-n

指定导入数据的数据库的名称。

警告:如果指定数据库不与 LDIF 文件中包含的后缀相对应,则该数据库中包含的所有数据都将被删除,并且导入失败。确保数据库的名称没有拼错。

-i

指定待导入的 LDIF 文件的完整路径名称。该选项是必需的。可以使用多个 -i 参数一次导入多个 LDIF 文件。导入多个文件时,服务器按命令行上指定的顺序导入 LDIF 文件。

有关使用该命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "ldif2db"

使用 ldif2db-task 初始化后缀

对于 ldif2db 命令,directoryserver ldif2db-task 命令会覆盖指定后缀中的数据。该脚本要求服务器依序运行,以执行导入。

此脚本的命令为:

 

# /usr/sbin/directoryserver -s server ID ldif2db-task ...

以下示例使用 ldif2db-task 导入 LDIF 文件。您无需拥有运行该命令的 root 特权,但必须以拥有 root 权限的用户身份(如目录管理员)进行验证。

/usr/sbin/directoryserver -s example ldif2db-task \
  -D "cn=Directory Manager" -w password -n Database1 \
  -i /var/opt/mps/serverroot/slapd-example/ldif/demo.ldif

下表说明示例中使用的 ldif2db-task 选项:

表 4-3 在示例中使用的 ldif2db-task 选项的说明

选项

说明

-D

指定具有 root 权限的用户 DN,如目录管理员。

-w

指定用户的口令。

-n

指定导入数据的数据库的名称。

警告:如果指定数据库不与 LDIF 文件中包含的后缀相对应,则该数据库中包含的所有数据都将被删除,并且导入失败。确保数据库的名称没有拼错。

-i

指定待导入的 LDIF 文件的完整路径名称。该选项是必需的。可以使用多个 -i 参数一次导入多个 LDIF 文件。导入多个文件时,服务器按命令行上指定的顺序导入 LDIF 文件。

有关使用此命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "ldif2db-task"


导出数据

可以使用 LDIF 导出目录的内容。导出数据可以有下列用途:

导出操作不会导出配置信息 (cn=config)。


警告

在执行导出操作期间,请不要停止服务器。


使用控制台将整个目录导出到 LDIF

可以将部分或所有目录数据导出到 LDIF,具体情况要视最终导出的文件位置而定。如果 LDIF 文件在服务器上,则可以仅导出服务器上本地后缀中包含的数据。如果 LDIF 文件不在服务器上,则可以导出所有的后缀和链接的后缀。

要在服务器运行的情况下从 Directory Server Console 将目录数据导出到 LDIF,请执行以下操作:

  1. 在 Directory Server Console 的顶级“任务”选项卡上,滚动到选项卡的底部,然后单击“导出到 LDIF”旁边的按钮。
  2. 显示“导出”对话框。

  3. 如果在服务器的远程计算机上运行控制台,则在“LDIF 文件”字段下显示两个单选按钮。选择“在控制台计算机上”,表明您正在导出到运行控制台的计算机上的 LDIF 文件中。选择“在服务器计算机上”,表明您正在导出到位于服务器计算机上的 LDIF 文件中。
  4. 在“LDIF 文件”字段中输入 LDIF 文件的完整路径和文件名,或单击“浏览”查找该文件。
  5. 如果已经选择了“在服务器计算机上”,则浏览按钮处于禁用状态。未启用浏览按钮时,默认情况下,该文件存储在下列目录中:

    ServerRoot/slapd-server ID/ldif

  6. 如果要导出整个目录,请选择“所有后缀”单选按钮。
  7. 如果只想导出目录的一个子树,请选择“子树”单选按钮,然后在文本框中输入“子树”基准上的 DN。

    还可以单击“浏览”选择子树。

  8. 单击“确定”将目录内容导出到文件。

使用控制台将单一后缀导出到 LDIF

要在服务器运行的情况下将一个后缀从 Directory Server Console 导出到 LDIF,请执行以下操作:

  1. 在 Directory Server Console 的顶级“配置”选项卡上,展开数据节点,显示要导出的后缀。
  2. 右键单击后缀节点,从弹出菜单中选择“导出”。或者,可以选择后缀节点,然后从“对象”菜单中选择“导出”。
  3. 显示“导出后缀”对话框。

  4. 在 “LDIF 文件”字段中,输入该 LDIF 文件的完整路径,或单击“浏览”以在计算机上找到它。
  5. 未启用浏览按钮时,默认情况下,该文件存储在下列目录中:

    ServerRoot/slapd-server ID/ldif

  6. 如果复制了后缀,您可以选中复选框以导出复制信息。仅当使用导出的 LDIF 初始化该后缀的其他副本时,才需要使用该功能。
  7. 如果对此后缀启用了属性加密,则可以选中该复选框对属性进行解密。为此,必须提供保护服务器证书数据库的口令。选择该选项,输入口令或输入包含口令的文件名称。如果无法提供口令对属性值进行解密,则 LDIF 输出中将显示加密的值。
  8. 单击“确定”将后缀的内容导出到文件。

从命令行导出到 LDIF

可以使用 directoryserver db2ldif 命令将任何后缀或目录的子树导出到 LDIF。当服务器运行或停止时,该脚本将所有的后缀内容或部分内容导出到 LDIF 文件。

要将数据库的内容导出到 LDIF 文件中,请使用下列命令:

 

# /usr/sbin/directoryserver -s server ID db2ldif ...

以下示例将两个后缀导出到一个 LDIF 文件中:

/usr/sbin/directoryserver -s example db2ldif \
     -a /var/opt/mps/serverroot/slapd-example/output.ldif \
     -s "dc=example,dc=com" -s "o=NetscapeRoot"

下表介绍本示例中使用的 db2ldif 选项:

表 4-4 本示例中使用的 db2ldif 选项的说明

选项

说明

-a

定义输出文件的名称,服务器将导出的 LDIF 保存到该文件中。默认情况下,该文件存储在 ServerRoot/slapd-server ID 目录下。

-s

指定要包括在导出中的后缀或子树。可以使用多个 -s 参数指定多个后缀或子树。

db2ldif 命令同时还可与 -r 选项一起使用,以将复制的后缀导出到 LDIF 文件中。结果 LDIF 将包含复制机制使用的属性子类型。然后可以将该 LDIF 文件导入到使用者服务器中,以初始化使用者副本,如“初始化副本”中所述。

db2ldif 命令与 -r 选项一起使用时,不可运行服务器。必须先停止服务器,然后再启动它,或者将 db2ldif.pl 脚本与 -r 选项一起使用,该选项不需要停止服务器。

有关使用该脚本的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "db2ldif"


备份数据

备份数据会保存目录内容的快照,以备将来数据库文件损坏或被删除时使用。可以使用 Directory Server Console 或命令行脚本备份后缀。


警告

在执行备份操作期间,切勿停止服务器。


默认情况下,此处说明的所有备份步骤都将把服务器文件的一个副本存储在同一主机上。然后,您应该将备份复制并存储到其他计算机或文件系统上,以保证更好的安全性。


无法使用这些备份方法备份远程服务器上的链接后缀。必须独立地备份单独的服务器。


使用控制台备份服务器

从 Directory Server Console 备份服务器时,服务器将所有的数据库内容及相关的索引文件复制到备份位置。可以在运行服务器的同时执行备份操作。

要从控制台备份服务器,请执行以下操作:

  1. 在 Directory Server Console 的顶级“任务”选项卡上,单击“备份 Directory Server” 旁边的按钮。
  2. 显示“备份 Directory Server”对话框。

  3. 在“目录”文本框中,输入要存储备份的目录的完整路径。如果在目录所在的计算机上运行控制台,请单击“浏览”查找本地目录。
  4. 或单击使用默认目录在以下目录中存储备份:

    ServerRoot/slapd-serverID/bak/YYYY_MM_DD_hh_mm_ss

    其中,serverID 是目录服务器的名称,同时还将生成目录名称以包含备份创建的日期和时间。

  5. 单击“确定”,创建该备份。

从命令行备份服务器

可以使用 directoryserver db2bak 命令从命令行备份服务器。不管服务器是否正在运行,该命令都可以起作用。

不能使用该备份方法备份配置信息。有关备份配置信息的详细信息,请参阅“备份 dse.ldif 配置文件”

要备份目录,请使用以下命令:

 

# /usr/sbin/directoryserver -s serverID db2bak backupDir

backupDir 参数指定应在其中存储备份的目录。默认备份目录名称从当前日期生成:YYYY_MM_DD_hh_mm_ss。有关使用该命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "db2bak"。有关为部署设计备份策略的详细信息,请参阅《Directory Server Deployment Planning Guide》Chapter 9 中的 "Planning a Backup Strategy"

备份 dse.ldif 配置文件

Directory Server 自动备份 dse.ldif 配置文件。启动 Directory Server 时,它会自动在以下目录的名为 dse.ldif.startOK 的文件中创建 dse.ldif 文件的备份:

ServerRoot/slapd-serverID/config

如果您对 cn=config 分支进行修改,则服务器在将修改写入到 dse.ldif 文件之前,会首先将文件备份到 config 目录的名为 dse.ldif.bak 的文件中。如果需要保存配置,请创建这些文件之一的副本。


从备份恢复数据

以下步骤说明如何使用 Directory Server Console 或命令行恢复目录中的后缀。服务器必须已经使用“备份数据”中所述的步骤进行了备份。在恢复复制参数中涉及的后缀之前,请阅读“恢复已复制的后缀”


警告

在执行备份或恢复操作期间,不要停止服务器。

恢复服务器会覆盖任何现有的数据库文件,并会丢失自备份后对数据所做的任何修改。


恢复已复制的后缀

恢复在供应商服务器和使用者服务器之间复制的后缀之前,需要特殊的考虑。如果可能,您应该通过复制机制更新后缀,而不是从备份进行恢复。该小节说明如何和何时恢复副本,以及在操作后如何确保其与其他副本同步。有关使用备份和恢复初始化副本的进一步信息,请参阅“初始化副本”

在单个主方案中恢复供应商

后缀,即单主供应商,包含整个复制拓扑的授权数据。因此,恢复该后缀等于重新初始化整个拓扑中的所有数据。只有要重新初始化要恢复的备份内容的所有数据时,才需要恢复单主副本。

如果单主数据由于错误而无法恢复,则可以考虑利用某个使用者副本上的数据,因为它可能包含比备份更新的更新内容。在这种情况下,则需要将数据从使用者副本导出到 LDIF 文件,并从 LDIF 文件重新初始化主副本。

无论是在主副本上恢复备份还是导入 LDIF 文件,接下来都必须重新初始化从该副本接收更新的所有集线器副本和使用者副本。供应商服务器的日志文件会记录一条消息,提示您需要对使用者副本重新初始化。

在多主方案中恢复供应商

在多主复制中,其他主副本每个都包含复制数据的授权副本。不能用当前的副本内容恢复可能已过时的旧备份。如有可能,应允许复制机制从其他主副本的内容更新该主副本。

如果不可能,则只应当以下列方式中的一种恢复多主副本:

不管采用何种方式恢复或重新初始化,主副本初始化后都将保持只读模式。该行为允许此副本与其他主副本同步,此后,可允许执行写操作,如“多主副本初始化后会聚”中所述。

允许在恢复或重新初始化主副本上执行写操作之前,允许会聚所有副本的优点是,不需要重新初始化集线器或使用者服务器。

恢复集线器副本

本节只适用于复制机制不能自动更新集线器副本的情况。例如,如果数据库文件毁坏或复制中断的时间很长。在这样的情况下,将需要按照以下方式之一恢复或重新初始化集线器副本:

恢复专门使用者

本节只适用于复制机制不能自动更新专门的使用者副本的情况。例如,数据库文件毁坏或复制中断的时间很长的情况。在这样的情况下,将需要按照以下方式之一恢复或重新初始化使用者副本:

使用控制台恢复服务器

您可以使用 Directory Server Console 从以前生成的备份恢复已损坏的目录数据。要使用控制台恢复数据,Directory Server 必须正在运行。然而,在恢复期间不能使用相应的后缀处理操作。

要从先前创建的备份恢复服务器,请执行以下操作:

  1. 在 Directory Server Console 的顶级“任务”选项卡上,单击“恢复 Directory Server” 旁边的按钮。
  2. 显示“恢复目录”对话框。

  3. 从“可用的备份”列表中选择“备份”,或在“目录”文本框中输入有效备份的完整路径。
  4. 可用的备份列表会显示默认目录中的全部备份:

    ServerRoot/slapd-serverID/bak

  5. 单击“确定”恢复服务器。

从命令行恢复服务器

可使用以下脚本从命令行恢复服务器:

使用 bak2db 命令

要在关闭服务器的情况下从命令行恢复目录,请执行以下操作:

  1. 从命令行以 root 用户身份,用以下命令停止服务器:

     

    # /usr/sbin/directoryserver -s server ID stop

  2. bak2db 命令与备份目录的完整路径一起使用:

     

    # /usr/sbin/directoryserver -s server ID bak2db backupDir

  3. 使用以下命令启动服务器:

     

    # /usr/sbin/directoryserver -s server ID start

以下示例从默认的备份目录中恢复备份:

/usr/sbin/directoryserver -s example bak2db \
         /var/opt/mps/serverroot/slapd-example/bak/2003_07_01_11_34_00

有关详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "bak2db"

使用 bak2db-task

要在服务器运行的情况下从命令行恢复目录,请使用以下命令:

 

# /usr/sbin/directoryserver -s server ID bak2db-task ...

以下示例使用 bak2db-task 命令恢复备份。-a 选项给出备份目录的完整路径。

/usr/sbin/directoryserver -s example bak2db-task\
  -D "cn=Directory Manager" -w password \
  -a /var/opt/mps/serverroot/slapd-example/bak/2003_07_01_11_34_00

有关详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "bak2db-task"

恢复 dse.ldif 配置文件

该目录在以下目录中创建 dse.ldif 文件的两个备份副本:

ServerRoot/slapd-server ID/config

dse.ldif.startOK 文件在服务器启动时,记录 dse.ldif 文件的副本。 dse.ldif.bak 文件包含 dse.ldif 文件最近所做更改的备份。将包含最近更改的文件复制到目录中。

要恢复 dse.ldif 配置文件,请执行以下操作:

  1. 从命令行以 root 用户身份,用以下命令停止服务器:

     

    # /usr/sbin/directoryserver -s server ID stop

  2. 更改为包含配置文件的目录,例如:
  3. # cd /var/mps/serverrot/slapd-serverID/config

  4. 使用已知完好的备份配置文件覆盖 dse.ldif 文件。例如,可键入以下内容:
  5. cp dse.ldif.startOK dse.ldif

  6. 使用以下命令启动服务器:

     

    # /usr/sbin/directoryserver -s server ID start



上一章      目录      索引      下一章     


版权所有 2004 Sun Microsystems, Inc. 所有权利保留。