数据的备份与恢复
初始化客户端
参数获取可参照准备工作中华为云SDK认证方式。
Copied!
String authUrl = "****************/";
String user = "****************";
String password = "****************";
String projectId = "****************";
String userDomianId = "****************";
OSFactory.enableHttpLoggingFilter(true);
OSClient.OSClientV3 osClient = OSFactory.builderV3().endpoint(authUrl)
.credentials(user, password, Identifier.byId(userDomianId))
.scopeToProject(Identifier.byId(projectId)).authenticate();
设置自动备份策略
设置自动备份策略所需部分参数
名称 |
类型 |
描述 |
keepDays |
integer |
指定已生成的备份文件可以保存的天数。取值范围:0~732。取0值,表示关闭自动备份策略。如果需要延长保留时间请联系客服人员申请,自动备份最长可以保留2562天。 |
startTime |
string |
备份时间段。自动备份将在该时间段内触发。取值范围:格式必须为hh:mm-HH:MM且有效,当前时间指UTC时间。HH取值必须比hh大1。mm和MM取值必须相同,且取值必须为00、15、30或45。 |
period |
string |
备份周期配置。自动备份将在每星期指定的天进行。取值范围:格式为逗号隔开的数字,数字代表星期。 |
instanceId |
string |
实例ID。 |
代码展示
Copied!
String instanceId = "****************";
BackupPolicy backupPolicy = BackupPolicy.builder().keepDays(7)
.startTime("19:00-20:00")
.period("1,2").build();
SetBackupsPolicyRequest request = SetBackupsPolicyRequest.builder().backupPolicy(backupPolicy).build();
ActionResponse actionResponse = osClient.rds().backupRestore().setBackupsPolicy(request, instanceId);
if (actionResponse.isSuccess()) {
System.out.println("set backup policy success");
} else {
System.out.println("set backup policy failed");
}
说明
:
- 1、所涉及具体参数及其他参数请参考API Explorer。
- 2、关闭备份策略后,备份任务将立即停止,所有增量备份任务将立即删除,使用增量备份的相关操作可能失败,相关操作不限于下载、复制、恢复、重建等,请谨慎操作。
查询自动备份策略
根据实例ID查询自动备份策略
Copied!
BackupPolicy respBackupPolicy = osClient.rds().backupRestore().getBackupsPolicy(instanceId);
if (null != respBackupPolicy) {
System.out.println("obtain backup policy success");
} else {
System.out.println("obtain backup policy failed");
}
说明
:更多信息请参考API Explorer。
创建手动备份
创建所需部分参数
名称 |
类型 |
描述 |
instanceId |
string |
实例ID。 |
name |
string |
备份名称,4~64个字符,必须以英文字母开头,区分大小写,可以包含英文字母、数字、中划线或者下划线,不能包含其他特殊字符。 |
description |
string |
备份描述,不能包含>!<"&'=特殊字符,不大于256个字符。 |
代码展示
Copied!
ManualBackupRequest manualBackupRequest = ManualBackupRequest.builder().instanceId(instanceId)
.name("backup")
.description("manual backup").build();
ManualBackupResponse result = osClient.rds().backupRestore().create(manualBackupRequest);
System.out.println(result.toString());
if (result != null) {
System.out.println("create manual backup success");
} else {
System.out.println("create manual backup failed");
}
说明
:
- 1、其他参数使用请参考API Explorer。
- 2、SQL Server数据库引擎对单库创建手动备份时,支持批量执行。
- 3、只读实例不支持创建手动备份。
- 4、备份名称不能和已有备份重名。
获取备份下载链接
根据备份ID获取备份下载链接
Copied!
String backupId = "****************";
BackupFileResponse backupFileResponse = osClient.rds().backupRestore().listFile(backupId);
if (null != backupFileResponse) {
System.out.println("obtain the link for downloading a backup file success");
} else {
System.out.println("obtain the link for downloading a backup file failed");
}
说明
:
- 1、更多信息请参考API Explorer。
- 2、支持查询MySQL、PostgreSQL、Microsoft SQL Server的全量备份,以及MySQL和PostgreSQL的增量备份。
删除手动备份
根据备份ID删除手动备份
Copied!
ActionResponse deleteResponse = osClient.rds().backupRestore().delete(backupId);
if (deleteResponse.isSuccess()) {
System.out.println("delete a manual backup success");
} else {
System.out.println("delete a manual backup failed");
}
说明
:更多信息请参考API Explorer。
查询可恢复时间段
根据实例ID查询可恢复时间段,如果您备份策略中的保存天数设置较长,建议您传入查询日期“date”
Copied!
RestoreTimeResponse restoreTimeResponse = osClient.rds().backupRestore().getRestoreTime(instanceId);
if (null != restoreTimeResponse) {
System.out.println("query the restoration time range success");
} else {
System.out.println("query the restoration time range failed");
}
说明
:更多信息请参考API Explorer。
恢复到新实例
从备份恢复到新实例
Copied!
Ha createHa = Ha.builder().mode("ha").replicationMode("async").build();
DataStore createDatastore = DataStore.builder().type("MySQL").version("5.6").build();
Volume createVolume = Volume.builder().size(100).type("ULTRAHIGH").build();
BackupStrategy createBackupStrategy = BackupStrategy.builder().keepDays(7)
.startTime("06:15-07:15").build();
RestorePoint restorePoint = RestorePoint.builder().instanceId(instanceId)
.type("timestamp").restoreTime(1532001446987L).build();
CreateInstanceRequest createInstanceRequest = CreateInstanceRequest.builder().name("targetInst")
.availabilityZone("****************").region("****************")
.ha(createHa).datastore(createDatastore).port("3306")
.flavorRef("****************").volume(createVolume)
.vpcId("****************").subnetId("****************")
.securityGroupId("****************").backupStrategy(createBackupStrategy)
.password("*********").restorePoint(restorePoint).build();
CreateInstanceResponse createInstanceResponse = osClient.rds().backupRestore().restoreNewInstance(createInstanceRequest);
if (null != createInstanceResponse) {
System.out.println("restore data to a new DB instance success");
} else {
System.out.println("restore data to a new DB instance failed");
}
说明
:
- 1、所涉及具体参数请参考API Explorer。
- 2、源实例和目标实例的数据库类型必须一致,如都是MySQL。
- 3、RDS所有引擎的源实例和目标实例的数据库版本必须一致。
- 4、目标实例的数据卷总大小,大于或等于源实例的数据卷总大小。
恢复到已有实例
将数据库恢复到已有实例
Copied!
Source source = Source.builder().instanceId(sourceInstanceId).build();
Target target = Target.builder().instanceId(targetInstanceId).build();
RestoreExistInsRequest restoreExistInsRequest = RestoreExistInsRequest.builder().source(source)
.target(target).build();
RestoreExistInsResponse restoreExistInsResponse = osClient.rds().backupRestore().retoreExistInstance(restoreExistInsRequest);
if (null != restoreExistInsResponse) {
System.out.println("restore data to an existing DB instance success");
} else {
System.out.println("restore data to an existing DB instance failed");
}
说明
:
- 1、更多参数使用请参考API Explorer。
- 2、恢复SQL Server单个数据库到已有实例时,支持批量执行。
- 3、不支持PostgreSQL数据库实例。
- 4、恢复到已有实例时,存在如下约束:
源实例和目标实例的数据库类型必须一致,如都是MySQL。
目标实例数据库版本必须高于或等于源实例的数据库版本,如MySQL 5.7.25->5.7.27,SQL Server版本约束。
目标实例的存储空间大于或等于源实例的存储空间总大小。
不支持跨区域恢复操作。
- 5、恢复到当前实例时,存在如下约束:
仅支持实例的数据库引擎Microsoft SQL Server。
版本说明
本示例基于华为云SDK V3.0版本开发。
功能介绍
云数据库RDS服务支持数据库实例的备份和恢复,以保证数据可靠性。云数据库支持自动备份、手动备份。创建云数据库RDS实例时,系统默认开启自动备份策略,安全考虑,实例创建成功后不可关闭。您可根据业务需要设置自动备份策略,云数据库RDS服务按照您设置的自动备份策略对数据库进行备份。云数据库RDS服务的备份操作是实例级的,而不是数据库级的。当数据库故障或数据损坏时,可以通过备份恢复数据库,从而保证数据可靠性。当您新建数据库实例时,可以将已有的备份恢复到新实例。
云数据库RDS支持以下引擎:
1.MySQL
2.PostgreSQL
3.SQL Server
4.GaussDB(openGauss)
下面您可以通过示例了解具体的操作。
准备工作
数据的备份与恢复
初始化客户端
参数获取可参照准备工作中华为云SDK认证方式。
// endpoint url String authUrl = "****************/"; String user = "****************"; String password = "****************"; String projectId = "****************"; String userDomianId = "****************"; // initial Openstack4j Client OSFactory.enableHttpLoggingFilter(true); // create connection OSClient.OSClientV3 osClient = OSFactory.builderV3().endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomianId)) .scopeToProject(Identifier.byId(projectId)).authenticate();
设置自动备份策略
设置自动备份策略所需部分参数
代码展示
String instanceId = "****************"; // Setting an Automated Backup Policy BackupPolicy backupPolicy = BackupPolicy.builder().keepDays(7) .startTime("19:00-20:00") .period("1,2").build(); SetBackupsPolicyRequest request = SetBackupsPolicyRequest.builder().backupPolicy(backupPolicy).build(); ActionResponse actionResponse = osClient.rds().backupRestore().setBackupsPolicy(request, instanceId); if (actionResponse.isSuccess()) { System.out.println("set backup policy success"); } else { System.out.println("set backup policy failed"); }
说明
:查询自动备份策略
根据实例ID查询自动备份策略
// Obtaining an Automated Backup Policy BackupPolicy respBackupPolicy = osClient.rds().backupRestore().getBackupsPolicy(instanceId); if (null != respBackupPolicy) { System.out.println("obtain backup policy success"); } else { System.out.println("obtain backup policy failed"); }
说明
:更多信息请参考API Explorer。创建手动备份
创建所需部分参数
代码展示
// Creating a Manual Backup ManualBackupRequest manualBackupRequest = ManualBackupRequest.builder().instanceId(instanceId) .name("backup") .description("manual backup").build(); ManualBackupResponse result = osClient.rds().backupRestore().create(manualBackupRequest); System.out.println(result.toString()); if (result != null) { System.out.println("create manual backup success"); } else { System.out.println("create manual backup failed"); }
说明
:获取备份下载链接
根据备份ID获取备份下载链接
// Obtaining the Link for Downloading a Backup File String backupId = "****************"; BackupFileResponse backupFileResponse = osClient.rds().backupRestore().listFile(backupId); if (null != backupFileResponse) { System.out.println("obtain the link for downloading a backup file success"); } else { System.out.println("obtain the link for downloading a backup file failed"); }
说明
:删除手动备份
根据备份ID删除手动备份
// Deleting a Manual Backup ActionResponse deleteResponse = osClient.rds().backupRestore().delete(backupId); if (deleteResponse.isSuccess()) { System.out.println("delete a manual backup success"); } else { System.out.println("delete a manual backup failed"); }
说明
:更多信息请参考API Explorer。查询可恢复时间段
根据实例ID查询可恢复时间段,如果您备份策略中的保存天数设置较长,建议您传入查询日期“date”
// Querying the Restoration Time Range RestoreTimeResponse restoreTimeResponse = osClient.rds().backupRestore().getRestoreTime(instanceId); if (null != restoreTimeResponse) { System.out.println("query the restoration time range success"); } else { System.out.println("query the restoration time range failed"); }
说明
:更多信息请参考API Explorer。恢复到新实例
从备份恢复到新实例
// Restoring Data to a New DB Instance Ha createHa = Ha.builder().mode("ha").replicationMode("async").build(); DataStore createDatastore = DataStore.builder().type("MySQL").version("5.6").build(); Volume createVolume = Volume.builder().size(100).type("ULTRAHIGH").build(); BackupStrategy createBackupStrategy = BackupStrategy.builder().keepDays(7) .startTime("06:15-07:15").build(); RestorePoint restorePoint = RestorePoint.builder().instanceId(instanceId) .type("timestamp").restoreTime(1532001446987L).build(); CreateInstanceRequest createInstanceRequest = CreateInstanceRequest.builder().name("targetInst") .availabilityZone("****************").region("****************") .ha(createHa).datastore(createDatastore).port("3306") .flavorRef("****************").volume(createVolume) .vpcId("****************").subnetId("****************") .securityGroupId("****************").backupStrategy(createBackupStrategy) .password("*********").restorePoint(restorePoint).build(); CreateInstanceResponse createInstanceResponse = osClient.rds().backupRestore().restoreNewInstance(createInstanceRequest); if (null != createInstanceResponse) { System.out.println("restore data to a new DB instance success"); } else { System.out.println("restore data to a new DB instance failed"); }
说明
:恢复到已有实例
将数据库恢复到已有实例
// Restoring Data to an Existing DB Instance Source source = Source.builder().instanceId(sourceInstanceId).build(); Target target = Target.builder().instanceId(targetInstanceId).build(); RestoreExistInsRequest restoreExistInsRequest = RestoreExistInsRequest.builder().source(source) .target(target).build(); RestoreExistInsResponse restoreExistInsResponse = osClient.rds().backupRestore().retoreExistInstance(restoreExistInsRequest); if (null != restoreExistInsResponse) { System.out.println("restore data to an existing DB instance success"); } else { System.out.println("restore data to an existing DB instance failed"); }
说明
:源实例和目标实例的数据库类型必须一致,如都是MySQL。
目标实例数据库版本必须高于或等于源实例的数据库版本,如MySQL 5.7.25->5.7.27,SQL Server版本约束。
目标实例的存储空间大于或等于源实例的存储空间总大小。
不支持跨区域恢复操作。
仅支持实例的数据库引擎Microsoft SQL Server。
参考
更多信息请参考云数据库 RDS。