管理 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 操作傳輸的最大數據量(以位元組為單位)。
- 有效值:64 KB 的倍數,最多可達 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