第 15 章 导入和导出数据库
红帽单点登录包括导出和导入其整个数据库的功能。
您可以将整个 Red Hat Single Sign-On 数据库从一个环境迁移到另一个环境,或迁移到另一个数据库。服务器引导时的 export/import 触发,其参数通过 Java 属性传递。
由于服务器启动时导入和导出触发器,因此在导出/导入过程中对服务器或数据库执行任何操作。
您可以导出/导入数据库以:
- 文件系统上的目录。
- 文件系统上的一个 JSON 文件。
从目录导入时,文件名必须遵循以下命名规则:
- <REALM_NAME>-realm.json.例如,名为 "acme-roadrunner-affairs-affairs-realm.json" 的域的 "acme-roadrunner-affairs"。
- <REALM_NAME>-users-<INDEX>.json.例如:名为 "acme-roadrunner-affairs-usersairs-users-0.json" 的域文件 "acme-roadrunner-affairs"
如果导出到某个目录,您可以指定每个 JSON 文件中存储的用户数量。
导出到单个文件可生成大文件,因此如果您的数据库包含超过 500 个用户,则导出到一个目录而不是单个文件。将多个用户导出到目录中最佳执行,因为目录提供程序对每个"页面" (用户的文件)使用单独的事务。
每个文件的默认用户数和每个事务为五次,但您可以覆盖这个数量。如需更多信息,请参阅 keycloak.migration.usersPerFile。
导出到或从一个文件导出或导入一个事务,如果数据库包含多个用户,则可能会对性能造成影响。
导出到未加密的目录中:
bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=<DIR TO EXPORT TO>
bin/standalone.sh -Dkeycloak.migration.action=export
-Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=<DIR TO EXPORT TO>
导出到单个 JSON 文件:
bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO EXPORT TO>
bin/standalone.sh -Dkeycloak.migration.action=export
-Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO EXPORT TO>
同样地,对于导入,请使用 -Dkeycloak.migration.action=import,而不是 导出。例如:
bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO IMPORT> -Dkeycloak.migration.strategy=OVERWRITE_EXISTING
bin/standalone.sh -Dkeycloak.migration.action=import
-Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO IMPORT>
-Dkeycloak.migration.strategy=OVERWRITE_EXISTING
其他命令行选项包括:
- -Dkeycloak.migration.realmName
- 使用此属性导出专门命名的域。如果没有指定此参数,则所有域导出。
- -Dkeycloak.migration.usersExportStrategy
此属性指定用户导出到什么位置。可能的值包括:
- DIFFERENT_FILES - 用户导出到不同的文件,具体取决于 每个文件的最大用户数。DIFFERENT_FILES 是此属性的默认值。
- SKIP - Red Hat Single Sign-On 会跳过导出用户。
- REALM_FILE - 用户使用域设置导出到同一文件。该文件类似于带有域数据和用户的 "foo-realm.json"。
- SAME_FILE - 用户导出到同一文件,但与域文件不同。其结果与带有域数据和 "foo-users.json" 的 "foo-realm.json" 类似。
- -Dkeycloak.migration.usersPerFile
- 此属性指定每个文件和数据库事务的用户数量。默认情况下,其值为 fifty。如果 keycloak.migration.usersExportStrategy 是 DIFFERENT_FILES,Red Hat Single Sign-On 会使用此属性。
- -Dkeycloak.migration.strategy
- Red Hat Single Sign-On 在导入时使用此属性。它指定如何在数据库中已存在具有相同名称的域。
可能的值有:
- IGNORE_EXISTING - 如果名称相同的域已存在,则不要导入一个域。
- OVERWRITE_EXISTING - 删除现有的域并使用 JSON 文件中的新数据再次导入域。使用此值从一个环境完全迁移到另一个环境。
如果您要导入不是来自 Red Hat Single Sign-On 导出的文件,请使用 keycloak.import 选项。如果您导入多个域文件,请指定以逗号分隔的文件名列表。文件名列表比前面的情况更合适,因为在 Red Hat Single Sign-On 初始化主域后会出现这种情况。
示例:
- -Dkeycloak.import=/tmp/realm1.json
- -Dkeycloak.import=/tmp/realm1.json,/tmp/realm2.json
您不能将 keycloak.import 参数与 keycloak.migration.X 参数一起使用。如果您将这些参数一起使用,Red Hat Single Sign-On 会忽略 keycloak.import 参数。keycloak.import 机制会忽略 Red Hat Single Sign-On 中已存在的域。keycloak.import 机制对于开发目的非常方便,但如果需要更大的灵活性,请使用 keycloak.migration.X 参数。
15.1. 管理控制台导出/导入 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 从管理控制台导入大多数资源,以及导出大部分资源。Red Hat Single Sign-On 不支持用户导出。
Red Hat Single Sign-On masks 属性,其中包含导出文件中的 secret 或私有信息。从管理控制台导出文件不适合在服务器之间备份或数据传输。只有引导时导出适合在服务器之间备份或数据传输。
您可以使用导出期间创建的文件从管理控制台导入。您可以从一个域导出并导入到另一个域,也可以从一个服务器导出并导入到另一个域。
管理控制台导出/导入仅允许每个文件一个域。
Admin Console 导入可覆盖资源。请谨慎使用这个功能,特别是生产服务器上。Admin Console Export 操作中的 JSON 文件不适用于数据导入,因为它们包含 secret 的无效值。
您可以使用管理控制台导出客户端、组和角色。如果您的域中的数据库包含多个客户端、组和角色,则导出可能需要很长时间才能结束,并且 Red Hat Single Sign-On 服务器可能无法响应用户请求。请谨慎使用这个功能,特别是生产服务器上。