管理 SQL Server RDS 实例的备份对于确保数据可用性和灾难恢复至关重要。AWS 提供了工具来简化这个过程,包括命令可直接将 SQL Server RDS 数据库备份到 Amazon S3。本文将指导您完成执行备份和恢复所需的命令和配置。
将 SQL Server RDS 备份到 S3
用于创建备份的主要存储过程是 msdb.dbo.rds_backup_database
。此命令允许您指定要备份的数据库以及备份将存储在的 S3 位置。
包参数
该存储过程支持几个参数,这些参数分为 必需 和 可选。
必需参数
@source_db_name
:要备份的数据库名称。@s3_arn_to_backup_to
:指示用于备份的 Amazon S3 存储桶的 ARN,包括备份文件名。- 文件可以使用任何扩展名,但通常使用
.bak
。
- 文件可以使用任何扩展名,但通常使用
可选参数
-
@kms_master_key_arn
- 用于加密备份的对称加密KMS密钥的ARN。
- 您不能使用默认的加密密钥。使用默认密钥将导致备份失败。
- 如果您不指定KMS密钥,备份文件将不会被加密。
- 仅支持对称KMS密钥。
-
@overwrite_s3_backup_file
- 确定是否覆盖现有文件。
0
(默认):不覆盖现有文件。如果文件已存在,则返回错误。1
:覆盖现有文件,即使它不是备份文件。
-
@type
- 指定备份类型。
FULL
(默认):执行完全备份。DIFFERENTIAL
:基于最后一次完全备份创建差异备份。- 重要提示:为了使差异备份正常工作,在最后一次完全备份和差异备份之间不应存在快照。如果存在快照,请在差异备份之前执行另一次完全备份。以下是一个检查最后一次完全备份的示例查询:
MS SQL
select top 1
database_name,
backup_start_date,
backup_finish_date
from msdb.dbo.backupset
where database_name = 'mydatabase'
and type = 'D'
order by backup_start_date desc;
-
@number_of_files
- 指定备份将被分成的文件(块)数量。最大值:10。
- 如果设置为
1
或省略,则创建单个备份文件。 - 多文件备份必须在文件名中使用一个
*
,在生成过程中将被字母数字字符串替换。例如:- 输入:
backup*.bak
,@number_of_files = 4
- 输出:
backup1-of-4.bak
,backup2-of-4.bak
,backup3-of-4.bak
,backup4-of-4.bak
- 输入:
-
@block_size
- 指定备份操作的物理块大小(以字节为单位)。
- 有效值:
512
、1024
、2048
、4096
、8192
、16384
、32768
、65536
。
-
@max_transfer_size
- 表示每个I/O操作传输的最大数据量(以字节为单位)。
- 有效值:以
65536
字节的倍数为单位,最大可达4194304
字节(4 MB)。
-
@buffer_count
- 备份过程中使用的I/O缓冲区总数。
命令语法
MS SQL
exec msdb.dbo.rds_backup_database
@source_db_name = 'database_name',
@s3_arn_to_backup_to = 'arn:aws:s3:::bucket_name/file_name.extension',
[@kms_master_key_arn = 'arn:aws:kms:region:account-id:key/key-id'],
[@overwrite_s3_backup_file = 0|1],
[@block_size = 512|1024|2048|4096|8192|16384|32768|65536],
[@max_transfer_size = n],
[@buffer_count = n],
[@type = 'DIFFERENTIAL|FULL'],
[@number_of_files = n];
示例:将完整备份保存到S3
MS SQL
exec msdb.dbo.rds_backup_database
@source_db_name = 'MyDatabase',
@s3_arn_to_backup_to = 'arn:aws:s3:::mybucket/MyDatabase_backup_full.bak',
@overwrite_s3_backup_file = 1,
@type = 'FULL';
配置备份压缩
为节省空间并减少传输时间,您可以使用rdsadmin
命令为SQL Server RDS备份启用压缩。
启用压缩
MS SQL
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';
禁用压缩
MS SQL
exec rdsadmin..rds_set_configuration 'S3 backup compression', 'false';
注意: SQL Express不支持备份压缩;在这种情况下启用压缩将导致备份失败。
执行本地 SQL Server 备份
Amazon RDS也支持本地 SQL Server 备份功能。以下是备份和恢复操作的命令。
备份命令
完全备份命令
MS SQL
exec msdb.dbo.rds_backup_database
@source_db_name = 'MyDatabase',
@s3_arn_to_backup_to = 'arn:aws:s3:::mybucket/MyDatabase_backup_diff.bak',
@overwrite_s3_backup_file = 1,
@type = 'FULL';
差异备份命令
MS SQL
exec msdb.dbo.rds_backup_database
@source_db_name='mydatabase',
@s3_arn_to_backup_to='arn:aws:s3:::mybucket/differential_backup*.bak',
@type='DIFFERENTIAL',
@number_of_files=4;
恢复命令
差异恢复命令
MS SQL
exec msdb.dbo.rds_restore_database
@restore_db_name = 'MyDatabase',
@s3_arn_to_restore_from = 'arn:aws:s3:::mybucket/MyDatabase_backup_full.bak',
@type = 'FULL';
差异恢复命令
MS SQL
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak',
@type='DIFFERENTIAL',
@with_norecovery=1;
监控和管理备份任务
检查任务状态:
MS SQL
exec msdb.dbo.rds_task_status @db_name = 'MyDatabase';
取消备份任务:
MS SQL
exec msdb.dbo.rds_cancel_task @task_id = 1234;
注意事项
- 确保命令中使用的 S3 存储桶具有允许 RDS 实例访问的必要权限。
- 对于敏感数据,您可以使用 AWS KMS 主密钥在将备份存储到 S3 之前进行加密,方法是指定
@kms_master_key_arn
。
其他资源
有关更详细的示例和信息,请参阅官方 AWS SQL Server 备份文档。
本指南为使用 Amazon S3 管理 SQL Server RDS 备份提供了坚实的基础。有关更高级的配置,请查阅 AWS 文档或尝试提供的参数,以根据您的环境微调备份过程。
Source:
https://dzone.com/articles/how-to-backup-sql-server-rds-to-an-s3-bucket