前幾天介紹 RDS
又介紹使用 RDS PostgreSQL 的時候
該如何做稽核
但是資料庫還有一個很重要的功能就是備份與還原
PostgreSQL 和 MySQL 的使用都可以透過 Client 端工具
輕易的備份和還原資料庫
但是 SQL Server 有比較多限制
因此今天的備份會針對 SQL Server 的 bak 在 AWS 的備份還原做講解
進到 S3 的畫面中
建立一個 Bucket 等等備份還原使用
官方提供比較嚴謹的信任關係設定
根據選項群組及資料庫名稱才能夠使用
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceArn": [
"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier",
"arn:aws:rds:Region:my_account_ID:og:option_group_name"
]
}
}
}
]
}
想要偷懶一點的也可以省略 Condition
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"Service": "export.rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
建立政策並關聯上剛剛建立的 IAM 角色
記得將 bucket_name 替換成剛剛建立的 Bucket 名稱
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Action":
[
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::bucket_name"
},
{
"Effect": "Allow",
"Action":
[
"s3:GetObjectAttributes",
"s3:GetObject",
"s3:PutObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": "arn:aws:s3:::bucket_name/*"
}
]
}
不可使用 default 選項群組
建立新的選項群組
或是複製或修改現有選項群組
勾選剛剛建立的選項群組
並點按「Add Option」以新增選項
下拉式選單選擇「SQLSERVER_BACKUP_RESTORE」
並關聯第一步建立的 IAM 角色
到 RDS 列表頁面
編輯想要套用選項群組的資料庫並
如果與資料庫執行個體關聯,通常是版本有錯,需要重新建立
做完上述步驟即完成前置步驟設定
可以進行備份和還原
需將 database_name 替換成資料庫名稱
而 arn:aws:s3:::bucket_name/file_name.extension
則需要替換成 bucket 加上路徑名稱
eg:arn:aws:s3:::ironman-2023/sql-server/ironman-20230927.bak
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
@overwrite_s3_backup_file=1,
@type='FULL',
exec msdb.dbo.rds_restore_database
@restore_db_name='mydatabase',
@s3_arn_to_restore_from='arn:aws:s3:::mybucket/backup1.bak';
執行完備份或還原指令後
可使用下列語法查看備份和還原進度
exec msdb.dbo.rds_task_status
[@db_name='database_name'],
[@task_id=ID_number];
參考資料: