RDS SQL Server提供了執行個體層級的資料庫遷移上雲方案,支援將自建SQL Server的多庫或所有庫的全量資料遷移至阿里雲RDS SQL Server。您只需先備份自建SQL Server的所有資料庫,並將完整備份檔案上傳到OSS Bucket(儲存空間)的同一檔案夾中,然後執行遷移上雲指令碼即可。
如果您的上雲遷移層級為資料庫,即每次只需完成一個資料庫遷移上雲,SQL Server提供了以下三種基於OSS的資料庫上雲方案:
前提條件
源端資料庫需為自建SQL Server。
目標端RDS SQL Server執行個體需滿足如下條件:
執行個體版本為2008 R2、2012及以上。如需建立執行個體,請參見建立RDS SQL Server執行個體。
執行個體版本為RDS SQL Server 2008 R2時,需要在目標RDS執行個體中建立與待遷移資料庫名稱相同的資料庫,並保持資料庫為空白。如何建立資料庫,請參見建立資料庫和帳號。
說明2012及以上版本的執行個體,無需執行本步驟。
RDS SQL Server執行個體擁有足夠的儲存空間。如果空間不足,請提前升級執行個體空間。具體操作,請參見變更配置。
已開通OSS服務。具體操作,請參見開通OSS服務。
如果通過RAM使用者登入,則必須滿足以下條件:
RAM帳號具備AliyunOSSFullAccess許可權和AliyunRDSFullAccess許可權。如何為RAM使用者授權,請參見通過RAM對OSS進行許可權管理和通過RAM對RDS進行許可權管理。
阿里雲帳號(主帳號)已授權RDS官方服務帳號可以訪問您OSS的許可權。
所在阿里雲帳號(主帳號)需手動建立權限原則,然後將許可權添加到RAM帳號中。如何建立權限原則,請參見通過指令碼編輯模式建立自訂權限原則。
限制條件
本方案僅支援全量遷移上雲,暫不支援增量遷移上雲。
費用說明
本方案中僅會產生OSS的相關費用,詳情如下圖所示。
情境 | 費用說明 |
將本機資料備份檔案上傳至OSS | 不產生費用。 |
備份檔案儲存在OSS | 會產生OSS的儲存費用,計費詳情請參見OSS定價。 |
將備份檔案從OSS遷移至RDS |
|
準備工作
安裝Python2.7.18版本,詳情請參見Python官網。
確認Python安裝成功並查看版本。
選擇下述方法之一,安裝SDK依賴包:
方式一:使用pip安裝
pip install aliyun-python-sdk-rds pip install oss2
方式二:使用源碼安裝
# 複製OpenAPI git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git # 安裝阿里雲SDK核心庫 cd aliyun-python-sdk-core python setup.py install # 安裝阿里雲RDS SDK cd aliyun-python-sdk-rds python setup.py install # 複製阿里雲OSS SDK git clone https://github.com/aliyun/aliyun-oss-python-sdk.git cd aliyun-oss-python-sdk # 安裝阿里雲OSS2 SDK python setup.py install
1. 備份自建SQL Server所有資料庫
為保障資料一致性,在執行全量備份期間,請勿寫入新的資料,請提前安排以免影響業務運行。
如果您不使用備份指令碼來執行備份,備份檔案必須按照
資料庫名稱_備份類型_備份時間.bak
的格式來命名,例如Testdb_FULL_20180518153544.bak
,否則會導致備份報錯。
下載備份指令碼。
雙擊備份指令碼,使用Microsoft SQL Server Management Studio(SSMS)用戶端開啟。SSMS的串連方法,請參見官方文檔。
根據業務需求,修改如下參數。
配置項
說明
@backup_databases_list
需要備份的資料庫,多個資料庫以分號(;)或者半形逗號(,)分隔。
@backup_type
備份類型,取值如下:
FULL:全量備份。
DIFF:差異備份。
LOG:記錄備份。
重要本方案中,取值需為FULL。
@backup_folder
備份檔案所在的本地目錄。如不存在,會自動建立。
@is_run
是否執行備份,取值:
1:執行備份。
0:僅執行檢查,不執行備份。
運行備份指令碼,資料庫將備份至指定的目錄中。
2. 上傳備份檔案到OSS
建立儲存空間Bucket。
登入OSS管理主控台。
單擊Bucket列表,然後單擊建立Bucket。
配置如下關鍵參數,其他參數可以保持預設。
重要建立的儲存空間僅用於本次資料上雲,且上雲後不再使用,因此只需配置關鍵參數即可,為避免資料泄露及產生相關費用,上雲完成後請及時刪除。
建立Bucket時請勿開啟資料加密。更多詳情,請參見資料加密。
參數
說明
取值樣本
Bucket 名稱
儲存空間名稱,全域唯一,設定後無法修改。
命名規則:
只能包括小寫字母、數字和短劃線(-)。
必須以小寫字母或者數字開頭和結尾。
長度必須在3~63字元之間。
migratetest
地區
Bucket所屬的地區,如果您通過ECS內網上傳資料至Bucket中,且通過內網將資料恢複至RDS中,則需要三者地區保持一致。
華東1(杭州)
儲存類型
選擇標準儲存。本文上雲操作不支援其他儲存類型的Bucket。
標準儲存
上傳備份檔案到OSS。
說明當RDS執行個體和OSS的Bucket在同一地區時,二者可以通過內網互連,且資料上傳速度更快,並且不會產生外網流量費用。因此,在上傳備份檔案時,建議將檔案上傳至與目標RDS執行個體在同一地區的Bucket上。
本機資料庫備份完成後,需要將備份檔案上傳到您的OSS Bucket中,您可以採用如下方法之一:
3. 執行遷移上雲指令碼將資料庫遷移至RDS
解壓後執行如下命令,瞭解該指令碼需要傳入的參數資訊。
python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -h
結果如下:
RDSSQLCreateMigrateTasksBatchly.py -k <access_key_id> -s <access_key_secret> -i <rds_instance_id> -e <oss_endpoint> -b <oss_bucket> -d <directory>
參數說明如下:
參數
說明
access_key_id
目標RDS執行個體所屬的阿里雲帳號的AccessKey ID。
access_key_secret
目標RDS執行個體所屬的阿里雲帳號的AccessKey Secret。
rds_instance_id
目標RDS執行個體ID。
oss_endpoint
備份檔案所屬的儲存空間的Endpoint地址。擷取方法,請參見儲存空間概覽。
oss_bucket
備份檔案所屬的儲存空間名稱。
directory
備份檔案在OSS儲存空間中的目錄。如果是根目錄,請傳入
/
。執行遷移上雲指令碼,完成遷移任務。
本樣本以將OSS儲存空間(名稱為
testdatabucket
)的Migrationdata
目錄中所有滿足條件的備份檔案,全量遷移到RDS SQL Server執行個體(執行個體ID為rm-2zesz5774ud8s****)為例。python ~/Downloads/RDSSQLCreateMigrateTasksBatchly.py -k LTAIQ**** -s BMkIUhroub******** -i rm-2zesz5774ud8s**** -e oss-cn-beijing.aliyuncs.com -b testdatabucket -d Migrationdata
在RDS控制台查看遷移任務的執行進度。
訪問RDS執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。
根據RDS執行個體的版本,選擇下述操作步驟:
RDS SQL Server 2008 R2
單擊左側導覽列的資料上雲,您可以查看到所有提交的遷移上雲任務。
說明可以單擊右上方的重新整理來查看遷移上雲任務的最新狀態。
RDS SQL Server 2012及以上版本
單擊左側導覽列的備份復原,然後單擊備份資料上雲記錄頁簽。
說明預設會展示最近一周的記錄,您可以選擇時間範圍來查看特定時間段內的上雲恢複記錄。
常見錯誤
錯誤提示 | 原因 | 解決方案 |
| 調用OpenAPI時使用的AccessKey ID不正確。 | 傳入正確的AccessKey ID和AccessKey Secret,查看方法請參見存取金鑰常見問題。 |
| 調用OpenAPI時使用的AccessKey Secret不正確。 | |
| 本方案僅支援RDS SQL Server,不支援其他引擎。 | 將RDS SQL Server作為遷移的目標執行個體。 |
| RDS執行個體ID不存在。 | 檢查傳入的RDS執行個體ID是否正確。 |
| Endpoint錯誤,導致串連失敗。 | 檢查傳入的Endpoint是否正確,擷取方法請參見儲存空間概覽。 |
| OSS Bucket(儲存空間)不存在。 | 檢查傳入的OSS Bucket是否正確。 |
| OSS Bucket中對應的檔案夾不存在或檔案夾中沒有滿足條件的Database Backup檔案。 | 檢查OSS Bucket中檔案夾是否存在,同時檢查該檔案夾中是否存在滿足條件的Database Backup檔案。 |
| 備份檔案的名稱不符合規範。 | 如果您不使用備份指令碼來執行備份,備份檔案必須按照 |
| 子帳號許可權不足。 | 需要為子帳號授予OSS和RDS的讀寫權限(即AliyunOSSFullAccess和AliyunRDSFullAccess許可權)。關於授權操作方法,請參見為RAM使用者授權。 |
| 調用OpenAPI返回了錯誤資訊。 | 根據錯誤碼和錯誤資訊來分析具體原因,詳情請參見OpenAPI錯誤碼。 |
OpenAPI錯誤碼
HTTP Status Code | Error | Description | 說明 |
403 | InvalidDBName | The specified database name is not allowed. | 非法的資料庫名字,不允許使用系統資料庫名。 |
403 | IncorrectDBInstanceState | Current DB instance state does not support this operation. | RDS執行個體狀態不正確。例如,執行個體狀態為建立中。 |
400 | IncorrectDBInstanceType | Current DB instance type does not support this operation. | 不支援的引擎,該功能僅支援RDS SQL Server。 |
400 | IncorrectDBInstanceLockMode | Current DB instance lock mode does not support this operation. | 資料庫鎖定狀態不正確。 |
400 | InvalidDBName.NotFound | Specified one or more DB name does not exist or DB status does not support. | 資料庫不存在。
|
400 | IncorrectDBType | Current DB type does not support this operation. | 資料庫類型不支援該操作。 |
400 | IncorrectDBState | Current DB state does not support this operation. | 資料庫狀態不正確,例如,資料庫在建立中或者正在上雲任務中。 |
400 | UploadLimitExceeded | UploadTimesQuotaExceeded: Exceeding the daily upload times of this DB. | 上雲次數超過限制,每個執行個體每個庫每天不超過20次上雲操作。 |
400 | ConcurrentTaskExceeded | Concurrent task exceeding the allowed amount. | 上雲次數超過限制,每個執行個體每天上雲總次數不超過500次。 |
400 | IncorrectFileExtension | The file extension does not support. | 備份檔案的尾碼名錯誤。 |
400 | InvalidOssUrl | Specified oss url is not valid. | 提供的OSS下載連結地址不可用。 |
400 | BakFileSizeExceeded | Exceeding the allowed bak file size. | Database Backup檔案超過限制,最大不超過3TB。 |
400 | FileSizeExceeded | Exceeding the allowed file size of DB instance. | 還原備份檔案後將超過當前執行個體的儲存空間。 |
相關API
API | 描述 |
將OSS上的備份檔案還原到RDS SQL Server執行個體,建立資料上雲任務。 | |
開啟RDS SQL Server備份資料上雲任務的資料庫。 | |
查詢RDS SQL Server執行個體備份資料上雲工作清單。 | |
查詢RDS SQL Server備份資料上雲任務的檔案詳情。 |