![]() | |
Sun Java(TM) System Directory Server 5 2004Q2 管理指南 |
第 4 章
备份和恢复数据目录服务器管理的数据经常进行批量导入。Directory Server 提供导入和导出全部后缀的工具。它还提供用于一次备份所有后缀和从备份恢复所有数据的工具。
您可以使用纯文本 LDAP 数据交换格式 (LDIF) 备份和恢复数据。
本章说明备份和恢复目录数据需要执行的以下步骤:
设置后缀只读模式在 Directory Server 上执行特定的导出或备份操作前,可在任何后缀上启用只读模式,以确保在给定时间具有其内容状态的可靠图像。另外,在执行导入或恢复操作前,必须确保受操作影响的后缀并非处于只读模式。
在执行导出或备份操作前,Directory Server Console 和命令行公用程序不会自动将目录置于只读模式,因为这样会使目录无法更新。不过,如果具有多主配置,则可在一个服务器上启用只读模式,而其他主副本上的数据将保持可写状态。
要将后缀设为只读,请执行“设置访问权限和引用”中所述的步骤。换句话说,可将整个目录服务器设为不可写入,如“设置全局只读模式”中所述。
导入数据Directory Server 提供了两种导入数据的方法:
这两种方法都可以通过 Directory Server Console 和使用命令行公用程序实施。
下表显示了导入和初始化之间的差异:
表4-1导入数据与初始化后缀的比较
比较的域
导入数据
初始化后缀
覆盖内容
否
是
LDAP 操作
添加、修改、删除
只添加
性能
较慢
快速
响应于服务器故障
最佳努力(保留该故障点的所有更改)
全部毁坏(发生故障后,丢失所有更改)
LDIF 文件位置
在客户机上
本地到客户机或本地到服务器
导入配置信息 (cn=config)
是
否
导入 LDIF 文件
执行导入操作时,Directory Server Console 执行 ldapmodify 操作以向目录中添加新条目。条目在 LDIF 文件中指定,可能也包含更新语句以修改或删除现有条目,这是导入操作的一部分。
导入条目的目标,可以是 Directory Server 管理的任何后缀以及在配置中定义的任何已链接的后缀或已链接的子后缀。如同添加条目的任何其他操作一样,服务器将在导入条目时对所有新的条目编制索引。
使用控制台导入 LDIF
必须以目录管理员或管理员的身份登录以执行导入操作:
- 在 Directory Server Console 的顶级“任务”选项卡上,滚动到选项卡的底部,然后单击“从 LDIF 导入”旁边的按钮。
显示“导入 LDIF”对话框。
- 在“导入 LDIF”对话框的“LDIF 文件”字段中,输入要导入的 LDIF 文件的完整路径,或单击“浏览”以选择本地文件系统中的文件。
如果正在访问远程计算机上的目录,该字段名会显示为 “LDIF 文件(在控制台计算机上)”。此标签提示您正在浏览的是本地文件系统,而不是远程目录服务器计算机上的文件系统。
- 按照要求设置下列选项:
- 在“拒绝的文件”字段中,输入要控制台记录所有无法导入条目的文件的完整路径,或单击“浏览”以选择本地文件系统中的文件。
例如,服务器无法导入目录中已经存在的条目或者没有父对象的条目。控制台将在拒绝文件中写入服务器发送的错误消息。
如果不填充该字段,服务器将不记录被拒绝的条目。
- 单击“确定”开始执行导入操作。
Directory Server Console 显示一个对话框,对话框中包含操作的状态和所有发生的错误的文本。如果“拒绝的文件”不为空,则所有错误消息也将写入到已命名的文件中。
从命令行导入 LDIF
directoryserver ldif2ldap 命令将通过 LDAP 导入 LDIF 文件并执行它包含的所有操作。使用此命令将数据同时导入所有目录后缀。为了使用 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 文件。
从控制台初始化后缀
- 在 Directory Server Console 的顶级“配置”选项卡上,展开“数据”节点,显示要初始化的后缀。
- 右键单击后缀节点,从弹出菜单中选择“初始化”。或者,可以选择后缀节点,然后从“对象”菜单中选择“初始化”。显示“初始化后缀”对话框。
- 在 “LDIF 文件”字段中,输入要用于初始化的 LDIF 文件的完整路径,或单击“浏览”在计算机上找到该文件。
- 如果操作的是导入文件的本地计算机的控制台,则可跳到第 6 步。如果操作的是包含 LDIF 文件的服务器的远程计算机的控制台,则选择下列选项之一:
在控制台上。表明该 LDIF 文件位于正在运行控制台的计算机上。在这种情况下,您可以浏览该文件。
在服务器上。表明 LDIF 文件位于远程服务器上。在这种情况下,浏览按钮处于禁用状态。默认情况下,控制台在以下目录中查找该文件:
ServerRoot/slapd-server ID/ldif
- 单击“确定”。
- 确定您要覆盖后缀中的数据。将继续进行后缀初始化,同时在对话框中报告所有错误。
使用 ldif2db 命令初始化后缀
directoryserver ldif2db 命令初始化后缀并覆盖现有数据。此命令要求您在继续进行导入操作前关闭服务器。
默认情况下,先保存该命令,然后将任何现有的 o=NetscapeRoot 配置信息与所导入文件中的 o=NetscapeRoot 配置信息合并。
要在导入 LDIF 的同时停止服务器,请执行以下操作:
以下示例使用 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
有关使用该命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "ldif2db"。
使用 ldif2db-task 初始化后缀
对于 ldif2db 命令,directoryserver 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 选项:
有关使用此命令的详细信息,请参阅《Directory Server Administration Reference》Chapter 1 中的 "ldif2db-task"。
导出数据可以使用 LDIF 导出目录的内容。导出数据可以有下列用途:
导出操作不会导出配置信息 (cn=config)。
使用控制台将整个目录导出到 LDIF
可以将部分或所有目录数据导出到 LDIF,具体情况要视最终导出的文件位置而定。如果 LDIF 文件在服务器上,则可以仅导出服务器上本地后缀中包含的数据。如果 LDIF 文件不在服务器上,则可以导出所有的后缀和链接的后缀。
要在服务器运行的情况下从 Directory Server Console 将目录数据导出到 LDIF,请执行以下操作:
- 在 Directory Server Console 的顶级“任务”选项卡上,滚动到选项卡的底部,然后单击“导出到 LDIF”旁边的按钮。
显示“导出”对话框。
- 如果在服务器的远程计算机上运行控制台,则在“LDIF 文件”字段下显示两个单选按钮。选择“在控制台计算机上”,表明您正在导出到运行控制台的计算机上的 LDIF 文件中。选择“在服务器计算机上”,表明您正在导出到位于服务器计算机上的 LDIF 文件中。
- 在“LDIF 文件”字段中输入 LDIF 文件的完整路径和文件名,或单击“浏览”查找该文件。
如果已经选择了“在服务器计算机上”,则浏览按钮处于禁用状态。未启用浏览按钮时,默认情况下,该文件存储在下列目录中:
ServerRoot/slapd-server ID/ldif
- 如果要导出整个目录,请选择“所有后缀”单选按钮。
如果只想导出目录的一个子树,请选择“子树”单选按钮,然后在文本框中输入“子树”基准上的 DN。
还可以单击“浏览”选择子树。
- 单击“确定”将目录内容导出到文件。
使用控制台将单一后缀导出到 LDIF
要在服务器运行的情况下将一个后缀从 Directory Server Console 导出到 LDIF,请执行以下操作:
- 在 Directory Server Console 的顶级“配置”选项卡上,展开数据节点,显示要导出的后缀。
- 右键单击后缀节点,从弹出菜单中选择“导出”。或者,可以选择后缀节点,然后从“对象”菜单中选择“导出”。
显示“导出后缀”对话框。
- 在 “LDIF 文件”字段中,输入该 LDIF 文件的完整路径,或单击“浏览”以在计算机上找到它。
未启用浏览按钮时,默认情况下,该文件存储在下列目录中:
ServerRoot/slapd-server ID/ldif
- 如果复制了后缀,您可以选中复选框以导出复制信息。仅当使用导出的 LDIF 初始化该后缀的其他副本时,才需要使用该功能。
- 如果对此后缀启用了属性加密,则可以选中该复选框对属性进行解密。为此,必须提供保护服务器证书数据库的口令。选择该选项,输入口令或输入包含口令的文件名称。如果无法提供口令对属性值进行解密,则 LDIF 输出中将显示加密的值。
- 单击“确定”将后缀的内容导出到文件。
从命令行导出到 LDIF
可以使用 directoryserver db2ldif 命令将任何后缀或目录的子树导出到 LDIF。当服务器运行或停止时,该脚本将所有的后缀内容或部分内容导出到 LDIF 文件。
要将数据库的内容导出到 LDIF 文件中,请使用下列命令:
以下示例将两个后缀导出到一个 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 备份服务器时,服务器将所有的数据库内容及相关的索引文件复制到备份位置。可以在运行服务器的同时执行备份操作。
要从控制台备份服务器,请执行以下操作:
从命令行备份服务器
可以使用 directoryserver db2bak 命令从命令行备份服务器。不管服务器是否正在运行,该命令都可以起作用。
不能使用该备份方法备份配置信息。有关备份配置信息的详细信息,请参阅“备份 dse.ldif 配置文件”。
要备份目录,请使用以下命令:
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 必须正在运行。然而,在恢复期间不能使用相应的后缀处理操作。
要从先前创建的备份恢复服务器,请执行以下操作:
从命令行恢复服务器
可使用以下脚本从命令行恢复服务器:
使用 bak2db 命令
要在关闭服务器的情况下从命令行恢复目录,请执行以下操作:
以下示例从默认的备份目录中恢复备份:
/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
要在服务器运行的情况下从命令行恢复目录,请使用以下命令:
以下示例使用 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 配置文件,请执行以下操作: