Blog này giải thích cách di chuyển Microsoft® SQL Server® database được host on-premises (hoặc trên Amazon® EC2 hoặc Azure®) sang Amazon Relational Database Service (RDS). Việc di chuyển này yêu cầu backup SQL database của bạn vào AWS S3 bucket và restore database trên AWS RDS instance của bạn từ S3 bucket đó.
Giới thiệu
Các phiên bản trước của Amazon RDS instance không cho phép bạn restore dữ liệu từ file .bak. Kết quả là, user phải dùng Amazon Data Migration Services hoặc dùng wizard Import and Export để di chuyển dữ liệu đến và từ AWS RDS.
Amazon bắt đầu hỗ trợ Native Backup Restore vào tháng 7 năm 2016 và thêm các stored procedure sau vào database MSDB trên RDS:
- rds_backup_database – Backup một database đơn lẻ vào S3 bucket.
- rds_restore_database – Restore một database đơn lẻ từ S3.
- rds_task_status – Theo dõi task backup và restore đang chạy.
- rds_cancel_task – Hủy task backup hoặc restore đang chạy.
Blog này thảo luận về cách tận dụng thủ tục rds_restore_database để restore file .bak từ S3 và cách dùng thủ tục rds_task_status để giám sát tiến độ restore trong khi lệnh AWS S3 sync được dùng để upload file backup lên AWS S3 bucket.
Điều kiện tiên quyết
Để thực hiện migration, bạn nên có các điều kiện tiên quyết sau:
- SQL Server Agent Proxy
- AWS Command Line Interface (AWS CLI)
- ProfileName (một AWS user có quyền truy cập Amazon S3 và S3 bucket bao gồm
aws_access_key_idvàaws_secret_access_key.) - AWS RDS instance với option group phù hợp với tùy chọn
SQLSERVER_BACKUP_RESTOREđược map vào nó. - Cài đặt PowerShell
Bạn cũng nên có kiến thức cơ bản về SQL Server, tạo S3 bucket, tạo AWS user, cấp quyền truy cập S3 bucket, và tạo RDS instance.
Giải pháp
Các bước sau bao gồm giải pháp trong các phần sau:
Backup database trên local server.
Copy file backup vào AWS S3 bucket.
Restore SQL backup trong RDS từ S3 bucket.
Backup database trên local server
Bạn có thể dùng bất kỳ phương pháp nào để lấy backup local. Ví dụ sau dùng script .bat với lệnh sqlcmd mà bạn có thể dùng trong bất kỳ SQL agent job nào, trong trường hợp bạn cần lên lịch task migration:
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 và upload file backup lên AWS S3 bucket
Bạn có thể làm điều này bằng cách dùng lệnh AWS S3 copy hoặc AWS S3 sync. Tuy nhiên, lệnh sync rất phổ biến và được dùng rộng rãi trong ngành, nên ví dụ sau dùng nó.
Mặc định, AWS sync command không xóa file. Nó chỉ copy file mới hoặc sửa đổi đến đích. Bạn có thể dùng script PowerShell sau trong SQL agent job. Bạn cần chạy cả backup và bước copy này bằng SQL agent proxy account được cấu hình để chạy cmdExec và 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 trong RDS từ S3 bucket
Chạy lệnh sau để restore file MigrationTestDB2019-08-15 181640.bak làm 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'
Chú ý các tham số được cung cấp cho stored procedure. Bạn cần chỉ định các tham số sau:
- Tên database cần restore.
- Amazon Resource Name (ARN) của file backup. Đối với S3 objects, ARN tuân theo format được hiển thị ở đây.
SQL Server bắt đầu một restore task và gán cho nó một TaskID. Bạn có thể dễ dàng theo dõi trạng thái task với lệnh sau:
EXEC msdb.[dbo].[rds_task_status] @db_name ='DestinationDBName'
Bạn có thể dùng TaskID để theo dõi tiến độ thay vì @db_name.
Hãy lưu ý các vấn đề sau:
- Tên file backup trong bucket phân biệt chữ hoa/chữ thường (case sensitive) trong thủ tục rds_restore_database.
- IAM role dùng trong option group có quyền truy cập S3 bucket.
- S3 bucket policy không restrictive để loại trừ IAM role.
- RDS SQL instance dùng đúng option group nơi bạn thêm tùy chọn backup/restore. Cài đặt này là quan trọng. Nếu không có nó, restore không bắt đầu.
Hạn chế của SQL Server native backup và restore trong Amazon RDS
Dưới đây là một số hạn chế của SQL Server native backup và restore trong Amazon RDS:
- Không có differential, transaction log, filegroup backup, hoặc restore có thể, điều này không cản trở khôi phục dữ liệu. Amazon RDS cho phép bạn tạo scheduled instance snapshot, và những snapshot đó được giữ truy cập được trong kỳ 35 ngày rolling. Bạn có thể restore instance trong năm phút của thời điểm chỉ định trong 35 ngày qua.
- Bạn không thể restore KMS-encrypted backup từ S3 về on-premises.
- Bạn không thể restore database trong cùng RDS instance.
- Bạn không thể restore backup của Tabular Data Encryption (TDE) enabled databases.
- Target RDS instance yêu cầu truy cập S3 bucket.
- User account chạy lệnh RDS SQL Server native backup và restore cần có quyền thích hợp.
Kết luận
Blog này chỉ cho bạn cách backup database trên đích đám mây và restore nó trên AWS RDS instance. RDS instance không cung cấp truy cập vào drive hoặc server. Chìa khóa là chuyển file backup đến AWS S3 bucket và sau đó restore từ đó.
Một use case nữa cho bài viết này là lưu trữ SQL backup trực tiếp trên AWS S3, cung cấp data availability, security, và performance enhancements. Amazon S3 được thiết kế cho 99.999999999% (eleven 9s) durability. Cách tiếp cận này hiệu quả về chi phí khi nói đến việc lưu trữ database backup bằng cách tiết kiệm rất nhiều hard storage.
Sử dụng tab Feedback để đưa ra bình luận hoặc đặt câu hỏi.
Tối ưu môi trường của bạn với quản trị, quản lý và cấu hình chuyên nghiệp
Các chuyên gia Dịch vụ ứng dụng của Rackspace (RAS) cung cấp các dịch vụ chuyên nghiệp và được quản lý sau đây trên danh mục ứng dụng rộng:
- Nền tảng eCommerce và Trải nghiệm số
- Quản trị nguồn lực doanh nghiệp (ERP)
- Business Intelligence
- Salesforce Quản trị quan hệ khách hàng (CRM)
- Databases
- Lưu trữ Email và Năng suất
Chúng tôi cung cấp:
- Chuyên môn khách quan: Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị ngay lập tức.
- Fanatical Experience™: Chúng tôi kết hợp phương pháp Process first. Technology second.® với hỗ trợ kỹ thuật chuyên dụng để cung cấp giải pháp toàn diện.
- Danh mục không đối thủ: Chúng tôi áp dụng kinh nghiệm đám mây rộng lớn để giúp bạn chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
- Giao hàng Agile: Chúng tôi gặp gỡ bạn ở bất kỳ đâu trong hành trình của bạn và điều chỉnh thành công của chúng tôi với của bạn.
Tìm hiểu thêm về Databases
Sử dụng tab Feedback để đưa ra bình luận hoặc đặt câu hỏi. Bạn cũng có thể bắt đầu cuộc trò chuyện với chúng tôi.