迁移到 Databases for Redis
如果需要数据迁移
如果在升级到 Databases for Redis的下一个主要版本时绝对必须保留持久存储的数据,请执行步骤以成功迁移所有数据。 将所有“键/值”对复制到新部署中。 通过使用适合于您的用例的方法,从旧实例到新部署执行此操作。
Databases for Redis 提供了不受支持的示例脚本来帮助简化此过程。
迁移脚本
警告! 此脚本不受支持,并且作为可以在版本升级过程中将 Databases for Redis 数据从一个实例移至另一个实例的示例而存在。 此处将附加到本文档的所有源代码和二进制文件称为“本程序”。 IBM 没有为本程序提供任何种类的程序服务。 IBM 将“按现状”提供本程序,而不提供任何种类的保证。 IBM 将不对任何实际的,直接的,特殊的,偶然的或间接的损害或任何经济上的后果性损害 (包括利润损失或节省损失) 承担责任,即使已通知 IBM或 ITS 经销商此类损害的可能性也是如此。
将数据从旧 Databases for Redis 部署复制到新版本涉及运行简单 Python 脚本 在 GitHub 上可用。 该脚本会将源数据库中的所有密钥复制到新的 Databases
for Redis 部署。 下载脚本并确保已安装 Python 3.x。 如果你使用的是macOS,使用“homebrew
安装,运行”brew install python3
命令,即可获得最新版本。
接下来,创建一个迁移窗口,让您的用户知道您正在进行一些维护。 这样,您就有时间将所有数据迁移到新的 Databases for Redis 部署。 如果要将 Redis 用作密钥到期时间的密钥值存储库,那么会将这些到期时间复制到新数据库。 我们的示例使用数据库中的 1000 万个密钥来执行此操作,根据您的带宽,迁移所需的时间不多。
获取目标和源数据库凭证
在 UI 中获取目标和源数据库凭证
现在,获取旧源数据库和新 Databases for Redis 部署的凭证。 通过从“资源”页面中选择数据库,获取这两个 Databases for Redis 部署的凭证。 然后,单击 服务凭证 链接。 在其中,通过单击 _新建凭证_为目标数据库创建新凭证。 使用您为源创建的任何凭证。
在 CLI 中获取目标和源数据库凭证
使用 Cloud Databases CLI 插件获取目标和源数据库凭证。
运行类似如下的命令:
ibmcloud cdb deployment-connections <INSTANCE_NAME_OR_CRN>
这将为您提供包含主机名和端口的 Databases for Redis 连接 URI。 要获取数据库的解码 CA 证书,请运行:
ibmcloud cdb deployment-cacert <INSTANCE_NAME_OR_CRN>
对 CA 证书进行解码后,将其保存到文件以稍后连接到数据库。 如果您不知道部署的密码,请从生成的服务凭证获取该密码,或者通过运行以下命令来创建新密码:
ibmcloud cdb deployment-user-password <INSTANCE_NAME_OR_CRN> admin <NEW PASSWORD>
通过此信息,您可以获得目标和源数据库所需的内容。
运行脚本并迁移数据
由于您具有这两个数据库 (源和新的 Databases for Redis 目标) 的所有凭证,因此您已准备好运行 pymigration.py
脚本。 使用先前步骤中的凭证从终端运行代码:
python pymigration.py <SOURCE HOST> <SOURCE PASSWORD> <SOURCE PORT>
<DESTINATION HOST> <DESTINATION_USERNAME:DESTINATION_PASSWORD> <DESTINATION PORT>
<DESTINATION CA CERTIFICATE PATH> --sslsrc --ssldst
对于较新版本的Redis源代码,请使用 "<SOURCE USER:SOURCE PASSWORD>
。
由于您是从Databases for Redis数据库之外的源复制数据,因此如果您的Databases for Redis启用了 SSL/TLS,请添加 "--sslsrc
标记。 如果不是,那么不要添加标志。
这将确保 Redis 正在连接到支持 SSL/TLS 的数据库。 还要添加 --ssldst
,因为目标数据库是新的 Databases for Redis 部署,也启用了 SSL/TLS。
您可能添加的补充标志为 --db
和 --flush
。--db
指示从中复制密钥的数据库,即在新部署中复制到的数据库。
在从源数据库导入密钥之前,--flush
标志会清空目标数据库。 如果要在新部署中保留最新内容,--flush
将删除所有密钥,然后从源数据库导入新密钥。
运行使用 OldDB
作为数据迁移的源和 NewDB
作为已迁移数据的目标的脚本时,您会看到类似如下的输出:
python pymigration.py OldDB.databases.appdomain.cloud OldDBpassword1 88888 NewDB.databases.appdomain.cloud NewDBpassword1 99999 ~/NewDBCA --sslsrc --ssldst 10000000 keys: 100% |###################################################| Time: 0:00:00 Keys disappeared on source during scan: 0 Keys already existing on destination: 0
此脚本将 1000 万个密钥从 OldDB
复制到 NewDB
。 未在 OldDB
数据库上删除任何密钥。 如果向 OldDB
部署添加新密钥并再次尝试迁移数据,那么您会注意到目标上的密钥计数已更改为 10000000,因为该数据库中已存在原始的 1000 万个密钥。
10000000 keys: 100% |###################################################| Time: 0:00:00
Keys disappeared on source during scan: 0
Keys already existing on destination: 10000000
后续步骤
在数据迁移之后,使用新的连接字符串和凭证来交换应用程序的数据库连接字符串。