目录服务器所管理的数据通常是批量导入的。Directory Server Enterprise Edition 提供了用于导入和导出整个后缀的工具。此外,它还提供了用于同时备份所有后缀以及从备份恢复所有数据的工具。
在开始执行任何备份或恢复操作之前,请确保设计一个符合您自身要求的备份和恢复策略。有关不同备份选项、要考虑的注意事项以及规划备份和恢复策略的准则的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Deployment Planning Guide》中的“Designing Backup and Restore Policies”。
本章包含以下主题:
本部分介绍如何执行目录数据的二进制备份。除了本部分介绍的二进制备份过程之外,您还可以创建二进制副本,用于初始化复制拓扑中的后缀。请参见使用二制进副本初始化复制后缀。
二进制数据备份可保存目录数据的副本,以备将来数据库文件损坏或被删除时使用。此操作不会备份配置数据。如果您要备份整个目录服务器以用于灾难恢复,请参见灾难恢复。
切勿在备份操作期间停止服务器。
执行备份的频率必须高于清除延迟。清除延迟由 nsDS5ReplicaPurgeDelay 属性指定,它是以秒为单位的时间段,系统将在该时间段过后对更改日志执行内部清除操作。默认的清除延迟为 604800 秒(1 周)。更改日志用于维护更新记录(此更新可能已被复制或尚未复制)。
如果执行备份的频率低于清除延迟,则更改日志可能会在备份前就已被清除。因此,如果使用备份恢复数据,更改将会丢失。
默认情况下,本部分介绍的所有备份过程都会将服务器文件的副本存储在相同的主机上。您应该将备份复制并存储到不同的计算机或文件系统中,以获得更高的安全性。
必须停止目录服务器才能运行 dsadm backup 命令。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
备份目录数据。
$ dsadm backup instance-path archive-dir |
例如:
$ dsadm backup /local/ds /local/tmp/20051205 |
可以在服务器运行时通过使用 dsconf backup 命令备份目录数据。但是,如果在备份运行时更改了目录数据,则很难正确恢复数据。要避免在使用 dsconf backup 时出现此问题,请设置复制引用或将服务器设置为只读。
有关 dsadm 和 dsconf 命令的详细信息,请参见 dsadm(1M) 和 dsconf(1M) 手册页。
恢复服务器时,dse.ldif 配置文件必须包含与备份服务器时相同的配置信息。
$ cp instance-path/config/dse.ldif archive-dir |
执行以下操作时,目录服务器会自动将 dse.ldif 配置文件备份到目录 instance-path/config 中。
启动目录服务器时,将在名为 dse.ldif.startOK 的文件中创建 dse.ldif 文件的备份。
修改 cn=config 分支时,文件将首先备份到 config 目录中的 dse.ldif.bak 的文件,然后服务器才会将修改写入 dse.ldif 文件。
此过程将使用冻结模式功能。冻结模式允许您停止磁盘上的数据库更新,以便安全地实施文件系统快照。可以将冻结模式作为一种附加措施,以确保执行可靠的备份。
正在执行文件系统备份时,服务器不能在磁盘上写入用户数据。如果确定在某个时间范围内不会进行更新,请在此时间段进行备份。如果您无法确定是否会发生更新,请在备份前将服务器置于冻结模式。
在冻结模式下,服务器将继续在访问日志和错误日志中写入数据。在单服务器拓扑中,冻结模式下收到的操作将导致返回 LDAP 错误。对于处于脱机状态的数据库,所记录的错误消息为标准错误。在复制拓扑中将返回引用。为了使冻结模式正确工作,不应该在数据库上运行其他任务。
请注意,在冻结模式下,服务器数据库比只读模式更稳定。与冻结模式不同,只读模式允许创建任务和修改配置条目。打开冻结模式后,所有已配置的数据库都将处于脱机状态。所有正在进行的内部操作都将获得数据库即将进入脱机状态的通知。将完成正在进行的 LDAP 操作,并会刷新数据库环境。后续的传入操作(包括搜索用户数据)将被拒绝,直到关闭冻结模式时为止。但是,在冻结模式下仍可搜索配置参数。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
(可选的)将服务器置于冻结模式。
$ dsconf set-server-prop -h host -p port read-write-mode:frozen |
使用适用于您的文件系统类型的工具备份文件系统。
如果您的服务器处于冻结模式,请重新将服务器设置为读写模式。
$ dsconf set-server-prop -h host -p port read-write-mode:read-write |
如果服务器收到来自其他服务器的复制更新,则这些复制更新会在关闭冻结模式后立即启动。
备份到 LDIF 允许您将目录数据备份到格式化的 LDIF 文件。
可以通过使用 LDIF 导出后缀内容来备份目录数据。执行以下操作时,导出数据非常有用:
在您的服务器中备份数据
将数据复制到其他目录服务器
将数据导出到其他应用程序
更改目录拓扑后重新填充后缀
导出操作不会导出配置信息 ( cn=config)。
不要在执行导出操作期间停止服务器。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用以下任一命令将后缀导出到 LDIF 文件:
如果您的服务器是本地服务器并且已停止,请键入:
$ dsadm export instance-path suffix-DN LDIF-file |
如果您的服务器是远程服务器并且正在运行,请键入:
$ dsconf export -h host -p port suffix-DN LDIF-file |
以下示例使用 dsconf export 将两个后缀导出到单个 LDIF 文件:
$ dsconf export -h host1 -p 1389 ou=people,dc=example,dc=com \ ou=contractors,dc=example,dc=com /local/ds/ldif/export123.ldif |
还可以在 dsadm export 和 dsconf export 命令中使用 --no-repl 选项来指定不导出任何复制信息。默认情况下会将复制的后缀与复制信息一起导出到 LDIF 文件。得到的 LDIF 文件将包含复制机制所使用的属性子类型。然后可以在使用方服务器上导入此 LDIF 文件以初始化使用方副本,如初始化副本所述
有关这些命令的详细信息,请参见 dsadm(1M) 和 dsconf(1M) 手册页。
以下过程介绍如何在目录中恢复后缀。必须已经使用仅备份目录数据所述的过程备份了服务器。在恢复复制协议中所涉及的后缀之前,请先阅读恢复复制的后缀。
不要在执行恢复操作期间停止服务器。由于恢复服务器会覆盖所有现有的数据库文件,因此自备份以来对数据所做的所有修改都会丢失。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用以下任一命令恢复服务器:
如果您的服务器是本地服务器并且已停止,请键入:
$ dsadm restore instance-path archive-dir |
例如,要从备份目录恢复备份,请键入:
$ dsadm restore /local/ds/ local/ds/bak/2006_07_01_11_34_00 |
如果您的服务器是远程服务器并且正在运行,请键入:
$ dsconf restore -h host -p port archive-dir |
例如,要从备份目录恢复备份:
$ dsconf restore -h host1 -p 1389 /local/ds/bak/2006_07_01_11_34_00 |
有关这些命令的详细信息,请参见 dsadm(1M) 和 dsconf(1M) 手册页。
目录服务器将在下面的目录中创建 dse.ldif 文件的两个备份副本:
instance-path/config |
dse.ldif.startOK 文件将在服务器启动时记录 dse.ldif 文件的副本。dse.ldif.bak 文件包含最近对 dse.ldif 文件所做更改的备份。请将包含最近更改的文件复制到您的目录中。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
停止服务器。
$ dsadm stop instance-path |
转到包含配置文件的目录。
$ cd instance-path/config |
使用有效的备份配置文件覆盖 dse.ldif 文件,例如:
$ cp dse.ldif.startOK dse.ldif |
使用以下命令启动服务器:
$ dsadm start instance-path |
从 LDIF 文件初始化后缀。此操作将删除后缀中的当前数据,并将其替换为该 LDIF 文件的内容。
使用 LDIF 文件执行批量的 ldapadd、ldapmodify 或 ldapdelete 操作。这样您可以在目录的任何后缀中批量添加、修改和删除条目。
下表显示了初始化后缀与批量添加、修改和删除条目之间的区别。
表 9–1 比较初始化后缀和批量导入数据
比较范围 |
初始化后缀 |
批量添加、修改和删除条目 |
---|---|---|
覆盖内容 |
覆盖 内容 |
不覆盖内容 |
LDAP 操作 |
仅添加 |
添加、修改和删除 |
性能 |
快 |
较慢 |
对服务器故障的响应 |
响应能力极差(发生故障后会丢失所有更改) |
响应能力最强(将保留故障发生以前的所有更改) |
LDIF 文件位置 |
客户端本地或服务器本地 |
在客户机上 |
导入配置信息 (cn=config) |
导入配置信息 |
不导入配置信息 |
命令 |
服务器为本地服务器并且已停止时: dsadm import 服务器为远程服务器并且正在运行时: dsconf import |
ldapmodify -B |
初始化后缀会使用 LDIF 文件(仅包含用于添加的条目)的内容覆盖后缀中的现有数据。
要初始化后缀,您必须以目录管理员或管理者身份通过验证。
服务器正在运行时,只有目录管理员和管理者才能导入包含根条目的 LDIF 文件。出于安全考虑,只有这些用户才能访问后缀的根条目,例如 dc=example,dc=com.。
在恢复复制协议中所涉及的后缀之前,请先阅读恢复复制的后缀。
您所导入的所有 LDIF 文件都必须使用 UTF-8 字符集编码。
在初始化后缀时,LDIF 文件必须包含相应后缀的根条目和所有目录树节点。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用以下任一命令从 LDIF 文件初始化后缀,也就是说,将数据库内容导入 LDIF 文件。
这些命令将覆盖后缀中的数据。
如果您的服务器是本地服务器并且已停止,请键入:
$ dsadm import instance-path LDIF-file suffix-DN |
以下示例使用 dsadm import 命令将两个 LDIF 文件导入一个后缀。
$ dsadm import /local/ds /local/file/example/demo1.ldif \ /local/file/example/demo2.ldif dc=example,dc=com |
如果您的服务器是远程服务器并且正在运行,请键入:
$ dsconf import -h host -p port LDIF-file suffix-DN |
以下示例使用 dsconf import 导入 LDIF 文件。运行此命令不需要超级用户权限,但您必须以具有超级用户权限的用户身份(如目录管理员)通过验证。
$ dsconf import -h host1 -p 1389 /local/file/example/demo1.ldif \ ou=People,dc=example,dc=com |
如果在多个后缀上并行运行 dsconf import 和/或 dsconf reindex 命令,则事务日志将会增大,并可能对性能造成不利影响。
有关这些命令的详细信息,请参见 dsadm(1M) 和 dsconf(1M) 手册页。
执行 ldapmodify 操作时,可以批量添加、修改或删除条目。这些条目是在 LDIF 文件指定的,该文件包含用于修改或删除现有条目的更新语句。此操作不会删除已经存在的条目。
目录服务器所管理的任何后缀都有可能成为更改条目的目标。与添加条目的任何其他操作一样,服务器在导入新条目时会为所有新条目编制索引。
ldapmodify 命令通过 LDAP 导入 LDIF 文件,并执行该文件中包含的所有操作。使用此命令,可以同时修改所有目录后缀中的数据。
在恢复复制协议中所涉及的后缀之前,请参见恢复复制的后缀。
您所导入的所有 LDIF 文件都必须使用 UTF-8 字符集编码。
导入 LDIF 文件时,目录中必须存在父条目,或者必须先从该文件中添加父条目。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
从 LDIF 文件批量添加、修改或删除。
$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -B baseDN -f LDIF-file |
以下示例使用 ldapmodify 命令执行导入。运行此命令不需要超级用户权限,但您必须以具有超级用户权限的用户身份(如 cn=Directory Manager 或 cn=admin,cn=Administrators,cn=config)通过验证。最后一个参数指定要导入的 LDIF 文件的名称。
$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - \ -B dc=example,dc=com -f /local/ds/ldif/demo.ldif |
对于在提供方服务器和使用方服务器之间复制的后缀,在恢复之前需要注意一些特殊事项。请尽可能通过复制机制(而不是通过从备份恢复后缀)来更新后缀。
恢复提供方或集线器实例时,服务器配置必须与创建备份时的配置相同。要确保这一点,请在恢复目录服务器数据之前先恢复 dse.ldif 文件。请参见恢复 dse.ldif 配置文件。
本部分介绍如何、何时恢复副本,以及如何确保副本在恢复后与其他副本同步。要初始化副本,请参见初始化副本。
如果您有大型的复制后缀并要添加许多条目,同时要确保正确添加复制更新,请参见逐渐向大型复制后缀添加大量条目。
本部分包含与以下内容有关的信息:
作为单主提供方的后缀包含整个复制拓扑的授权数据。因此,恢复此后缀等同于重新初始化整个拓扑中的所有数据。只有在使用要恢复的备份内容重新初始化所有数据时,才应恢复单主提供方。
如果单主数据由于错误而无法恢复,请考虑使用某个使用方上的数据,因为它可能包含比备份还新的更新。在这种情况下,您需要将使用方副本中的数据导出到 LDIF 文件,然后从该 LDIF 文件重新初始化主服务器。
无论您在主副本上恢复备份还是导入 LDIF 文件,都必须重新初始化从此副本接收更新的所有集线器和使用方副本。在提供方服务器的日志文件中将记录一条消息,以提醒您必须对使用方进行重新初始化。
在多主复制中,其他每个主服务器都包含复制数据的授权副本。您无法恢复旧的备份,因为该备份对于当前的副本内容可能已经过时。如有可能,应允许复制机制使用其他主服务器的内容来更新主服务器。
如果无法执行此操作,请使用以下任一方法恢复多主副本:
最简单的方法不是恢复备份,而是从其他某个主服务器重新初始化预期的主服务器。这可以确保将最新数据发送到预期的主服务器,并且该数据可用于复制。请参见从 LDIF 进行副本初始化。
对于具有数百万条目的副本,较快的做法是创建二进制副本,以恢复其他某个主服务器上的较新备份。请参见使用二制进副本初始化复制后缀。
如果主服务器备份的存留期不长于其他任何主服务器上更改日志内容的最长存留期,则可使用该备份恢复此主服务器。有关更改日志存留期的描述,请参见修改主副本上的更改日志设置。恢复旧的备份之后,其他主服务器将使用其更改日志中自保存该备份以来进行的所有修改来更新此主服务器。
无论您以何种方式恢复或重新初始化,主副本在初始化后都仍然保持只读模式。此行为可使副本与其他主服务器进行同步,以便您在同步后允许执行写入操作,如在多主方案中恢复主服务器所述。
在已恢复或重新初始化的主服务器上允许执行写入操作之前一致所有副本的好处在于,所有集线器或使用方服务器都不需要重新初始化。
本部分仅适用于复制机制无法自动更新集线器副本的情况。数据库文件损坏或复制中断时间过长都属于这种情况。在这些情况下,您需要使用以下任一方法恢复或重新初始化集线器副本:
最简单的方法不是恢复备份,而是从某个主副本重新初始化集线器。这可以确保将最新数据发送到集线器,并且该数据可用于复制。请参见初始化后缀。
对于具有数百万条目的副本,较快的做法是创建二进制副本,以恢复来自其他集线器复制后缀的较新备份。请参见使用二制进副本初始化复制后缀。如果没有需要复制的其他集线器副本,请按照上一条的描述重新初始化集线器,或者按照下一条的描述恢复集线器(如有可能)。
如果集线器备份的存留期不长于其他任何提供方(集线器或主副本)上更改日志内容的最长存留期,则可使用该备份恢复此集线器。恢复集线器之后,提供方将使用其更改日志中自保存该备份以来进行的所有修改来更新此集线器。
无论您以何种方式恢复或重新初始化集线器副本,接下来都必须重新初始化此集线器的所有使用方,包括所有其他级别的集线器。
本部分仅适用于复制机制无法自动更新专用使用方副本的情况。数据库文件损坏或复制中断时间过长都属于这种情况。在这些情况下,您需要使用以下任一方法恢复或重新初始化使用方:
最简单的方法不是恢复备份,而是从某个提供方(主服务器或集线器副本)重新初始化使用方。这可以确保将最新数据发送到使用方,并且该数据可用于复制。请参见从 LDIF 进行副本初始化。
对于具有数百万条目的副本,较快的做法是创建二进制副本,以恢复来自其他使用方复制后缀的较新备份。请参见使用二制进副本初始化复制后缀。如果没有需要复制的其他使用方,请按照上一条的描述重新初始化副本,或者按照下一条的描述恢复副本(如有可能)。
如果使用方备份的存留期不长于其他任何提供方(集线器或主副本)上更改日志内容的最长存留期,则可使用该备份恢复此使用方。恢复使用方之后,提供方将使用其更改日志中自保存该备份以来进行的所有修改来更新此使用方。
使用多主复制时,其他主服务器可能会在给定主服务器恢复期间处理更改操作。因此,完成恢复操作之后,新的主服务器还必须接收恢复数据中未包含的较新更新。由于恢复主服务器可能需要大量时间,因此挂起的更新数也可能十分庞大。
为了一致这些挂起的更新,新恢复的主服务器将自动设置为只读模式,以便在恢复后执行客户端操作。此情况仅在通过以下方式恢复主服务器时适用:使用命令行从 LDIF 文件导入数据,或者使用备份执行二进制复制。
因此,在完成恢复操作之后,多主配置中的主服务器将处理复制更新并允许执行读取操作,但是对于来自客户端的所有写入操作将返回引用。
要在允许更新前验证新的主服务器是否与其他主服务器完全同步,请在已初始化的主服务器上手动启用更新。
由于主副本会因为上述新行为而发送引用,因此等待执行写入操作的客户端可能会达到配置的跳数限制。您可能需要提高客户端的跳数限制配置,以使其能够访问可用的主服务器。如果已初始化或重新初始化所有主副本,则所有写入操作都会失败,因为所有副本都不会接受客户端更新。
在任何情况下,都应密切监视已初始化的主服务器,并适当地设置引用属性,以尽可能提高服务器的响应能力。
可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
可以在脚本中使用以下命令,以便自动执行多主副本的初始化过程:
使用 insync 工具确保副本已与所有其他主服务器一致。
如果所有服务器上修改之间的延迟为零,或副本从未有任何需要复制的更改(延迟为 -1),则表明副本处于同步状态。有关详细信息,请参见 insync(1) 手册页。
开始接受更新。
$ dsconf set-suffix-prop -h host -p port suffix-DN repl-accept-client-update-enabled:on |
此命令自动将服务器设置为读写模式。
如果要备份或恢复目录服务器以用于灾难恢复,请使用以下过程。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
通过使用 dsadn backup 或 dsconf backup 命令创建数据库文件的备份。
使用二进制备份中的过程,并将备份文件存储到安全位置。
将配置目录 instance-path /config 复制到安全位置。
将模式目录 instance-path/config/schema 复制到安全位置。
将别名目录 instance-path/alias 复制到安全位置。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。