บทนำ
Blog อธิบายวิธี Move Microsoft® SQL Server® Database ที่ Host On-premises (หรือ Amazon® EC2 หรือ Azure®) ไป Amazon Relational Database Service (RDS) ต้อง Backup SQL Database ไป AWS S3 Bucket และ Restore Database บน AWS RDS Instance จาก S3 Bucket นั้น
Introduction
Previous Versions ของ Amazon RDS Instance ไม่ให้ Restore Data จาก File .bak ทำให้ Users ต้องใช้ Amazon Data Migration Services หรือ Import and Export Wizard เพื่อ Move Data ไปมาระหว่าง AWS RDS
Amazon เริ่ม Support Native Backup Restore ใน July 2016 และเพิ่ม Stored Procedures ต่อไปนี้ใน MSDB Database บน RDS:
- rds_backup_database – Backup Single Database ไป S3 Bucket
- rds_restore_database – Restore Single Database จาก S3
- rds_task_status – Track Running Backup และ Restore Task
- rds_cancel_task – Cancel Running Backup หรือ Restore Task
Blog นี้อธิบายการใช้ rds_restore_database Procedure Restore File .bak จาก S3 และใช้ rds_task_status Monitor Restore Progress ในขณะที่ AWS S3 Sync Command Upload Backup File ไป AWS S3 Bucket
Prerequisites
เพื่อ Migration ต้องมี Prerequisites:
- SQL Server Agent Proxy
- AWS Command Line Interface (AWS CLI)
- ProfileName (AWS User ที่มี Access Amazon S3 และ S3 Bucket รวม
aws_access_key_idและaws_secret_access_key) - AWS RDS Instance พร้อม Option Group ที่ Map
SQLSERVER_BACKUP_RESTOREOption - PowerShell Installation
ควรมี Basic Knowledge เกี่ยว SQL Server, สร้าง S3 Bucket, สร้าง AWS User, Grant Access S3 Bucket, สร้าง RDS Instance
Solution
Steps ครอบคลุม Solution ใน Sections:
- Backup Database บน Local Server
- Copy Backup File ไป AWS S3 Bucket
- Restore SQL Backup ใน RDS จาก S3 Bucket
Backup Database บน Local Server
ใช้ Method ใดก็ได้ ตัวอย่างใช้ .bat Script พร้อม sqlcmd Command ใช้ใน SQL Agent Job ได้ หากต้องการ Schedule Migration Task:
Sqlcmd -S SourceInstanceName -U sa -P password_here -Q "Declare @DBName nvarchar(200)='MigrationTestDB' DECLARE @BackupLocation NVARCHAR(2000) = 'C:\Temp\RDSmigration\backup\'+@DBName+ + REPLACE(CONVERT(VARCHAR(20), GETDATE(), 120) + '.bak', ':', ''); BACKUP DATABASE @DBName TO DISK = @BackupLocation with compression;"
Copy และ Upload Backup File ไป AWS S3 Bucket
ใช้ AWS S3 copy หรือ AWS S3 sync Commands แต่ Sync Command Popular และ Widely Used ตัวอย่างใช้ Sync
Default AWS Sync Command ไม่ Delete Files Copy ใหม่หรือ Modified Files ไป Destination ใช้ PowerShell Script ใน SQL Agent Job ต้อง Run Backup และ Copy Step ด้วย SQL Agent Proxy Account Configured รัน cmdExec และ PowerShell Subsystem
$LogDate = Get-Date -Format yyyy-MM-dd
$Global:LogFile = "C:\Temp\RDSmigration\Logs\$LogDate.log"
$env:Path += ';C:\Program Files\Amazon\AWSCLI\bin'
Set-AWSCredential -ProfileName backuptos3user
aws configure set aws_access_key_id AKIAVIH6FYWVO62BZ7QA
aws configure set aws_secret_access_key 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
aws configure set region ap-south-1
try {
$now = (Get-Date -Format G)
aws s3 sync C:\Temp\RDSmigration\backup s3://ramkrdsrestore --sse | out-file $LogFile
} catch {
Write-Host $_.Exception.Message -ForegroundColor Green
}
Restore SQL Backup ใน RDS จาก S3 Bucket
Run Command Restore File MigrationTestDB2019-08-15 181640.bak เป็น Database MigrationTestDB:
EXEC msdb.dbo.rds_restore_database @restore_db_name = 'MigrationTestDB', @S3_arn_to_restore_from = 'arn:aws:s3:::ramkrdsrestore/MigrationTestDB2019-08-15 181640.bak'
Parameters ที่ส่งให้ Stored Procedure ระบุ:
- Database Name ที่จะ Restore
- Amazon Resource Name (ARN) ของ Backup File สำหรับ S3 Objects ARN Format ตามที่แสดง
SQL Server เริ่ม Restore Task มอบ TaskID Track Status ด้วย:
EXEC msdb.[dbo].[rds_task_status] @db_name ='DestinationDBName'
ใช้ TaskID Track Progress แทน @db_name ได้
ข้อควรระวัง:
- Bucket Backup File Name Case Sensitive ใน Procedure rds_restore_database
- IAM Role ใน Option Group มี Access S3 Bucket
- S3 Bucket Policy ไม่ Restrictive Exclude IAM Role
- RDS SQL Instance ใช้ Correct Option Group ที่ Add Backup/Restore Option Setting นี้ Critical โดยไม่มี Restore ไม่เริ่ม
Limitations ของ SQL Server Native Backup และ Restore ใน Amazon RDS
- No Differential, Transaction Log, Filegroup Backup, หรือ Restore ไม่ใช่ Hindrance สำหรับ Data Recovery Amazon RDS ให้ Scheduled Instance Snapshots เก็บ 35 วัน Rolling Restore Instance ภายใน 5 นาทีของ Specified Time ใน 35 วันล่าสุด
- Cannot Restore KMS-encrypted Backups จาก S3 ไป On-premises
- Cannot Restore Database ใน RDS Instance เดียวกัน
- Cannot Restore Backups ของ Tabular Data Encryption (TDE) Enabled Databases
- Target RDS Instances ต้องมี Access S3 Bucket
- User Account ที่รัน RDS SQL Server Native Backup/Restore Commands ต้องมี Appropriate Permissions
สรุป
Blog แสดงวิธี Backup Database บน Cloud Destination และ Restore บน AWS RDS Instance RDS Instance ไม่ให้ Access Drives หรือ Server Key คือ Transfer Backup File ไป AWS S3 Bucket แล้ว Restore จากนั้น
Use Case อื่น: Store SQL Backups ตรงบน AWS S3 ให้ Data Availability, Security, และ Performance Enhancements Amazon S3 Designed สำหรับ 99.999999999% (Eleven 9s) Durability Approach นี้ Cost-effective สำหรับ Store Database Backups ประหยัด Hard Storage มาก
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม
เพิ่มประสิทธิภาพสภาพแวดล้อมด้วยบริการผู้เชี่ยวชาญ
ผู้เชี่ยวชาญ Rackspace Application Services (RAS) ให้บริการ Professional และ Managed Services ครอบคลุม Portfolio หลากหลาย:
- Platform สำหรับ eCommerce และ Digital Experience
- Enterprise Resource Planning (ERP)
- Business Intelligence
- Salesforce Customer Relationship Management (CRM)
- Databases
- Email Hosting และ Productivity
เรามอบ:
- Unbiased Expertise: ลดความซับซ้อนและนำทางการ Modernization เน้นความสามารถที่สร้างคุณค่าทันที
- Fanatical Experience™: รวมแนวทาง Process First. Technology Second.® พร้อม Technical Support ให้ Soluation ครบวงจร
- Unrivaled Portfolio: ประยุกต์ประสบการณ์ Cloud มากมายช่วยเลือกและ Deploy เทคโนโลยีที่เหมาะสมบน Cloud ที่เหมาะสม
- Agile Delivery: ตรงจุดที่คุณอยู่ในการเดินทางและทำให้ความสำเร็จของเราสอดคล้องกับคุณ
เรียนรู้เพิ่มเติมเกี่ยวกับ Databases
ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม คุณยังสามารถเริ่ม Conversation กับเราได้