本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將備份還原至 Amazon RDS for MySQL 資料庫執行個體
Amazon RDS 支援使用備份檔案匯入 MySQL 資料庫。您可以建立資料庫的備份、將備份檔案存放在 Amazon S3,然後將備份檔案還原至執行 MySQL 的新 Amazon RDS 資料庫執行個體。Amazon RDS 支援在所有 中從 Amazon S3 匯入備份檔案 AWS 區域。
本節所述的案例會還原內部部署資料庫的備份。只要可以存取資料庫,您就可以將此技術用於其他位置的資料庫,例如 Amazon EC2 或其他雲端服務。
下圖顯示所支援的案例。

如果您的現場部署資料庫可以在建立、複製和還原備份檔案時離線,我們建議您使用備份檔案將資料庫匯入 Amazon RDS。如果您的資料庫無法離線,您可以使用下列其中一種方法:
-
二進位日誌 — 首先,將備份檔案從 Amazon S3 和 匯入 Amazon RDS,如本主題所述。然後使用二進位日誌 (binlog) 複寫來更新資料庫。如需詳細資訊,請參閱使用外部來源執行個體設定二進位日誌檔案位置複寫。
-
AWS Database Migration Service — 使用 AWS Database Migration Service 將資料庫遷移至 Amazon RDS。如需詳細資訊,請參閱什麼是 AWS Database Migration Service?
從 Amazon S3 將備份檔案匯入 Amazon RDS 的設定概觀
若要將備份檔案從 Amazon S3 匯入 Amazon RDS,您需要下列元件:
用來儲存備份檔案的 Amazon S3 儲存貯體。
如果您已經有 Amazon S3 儲存貯體,則可以使用該儲存貯體。如果您沒有 Amazon S3 儲存貯體,請建立新的儲存貯體。如需詳細資訊,請參閱建立儲存貯體。
Percona XtraBackup 所建立之內部部署資料庫的備份。
如需詳細資訊,請參閱建立資料庫備份。
-
允許 Amazon RDS 存取 S3 儲存貯體的 AWS Identity and Access Management (IAM) 角色。
如果您已經有 IAM 角色,則可以使用該角色,並將信任和許可政策連接到該角色。如需詳細資訊,請參閱手動建立 IAM 角色。
如果您沒有 IAM 角色,您有兩個選項:
-
您可以手動建立新的 IAM 角色。如需詳細資訊,請參閱手動建立 IAM 角色。
-
您可以選擇讓 Amazon RDS 為您建立新的 IAM 角色。如果您希望 Amazon RDS 為您建立新的 IAM 角色,請遵循 將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體章節 AWS Management Console 中使用 的程序。
-
建立資料庫備份
使用 Percona XtraBackup 軟體來建立備份。建議您使用 Percona XtraBackup 的最新版本。您可以從 Percona 網站上的軟體下載
警告
建立資料庫備份時,XtraBackup 可能會將憑證儲存在 xtraackup_info 檔案中。請務必確認 xtrabackup_info 檔案中tool_command
的設定不包含任何敏感資訊。
您使用的 Percona XtraBackup 版本取決於您要備份的 MySQL 版本。
-
MySQL 8.4 — 使用 Percona XtraBackup 8.4 版。
-
MySQL 8.0 — 使用 Percona XtraBackup 8.0 版。
注意
Percona XtraBackup 8.0.12 及更高版本支援 MySQL 8.0 所有版本的遷移。如果您要遷移至 RDS for MySQL 8.0.32 或更新版本,您必須使用 Percona XtraBackup 8.0.12 或更新版本。
-
MySQL 5.7 — 使用 Percona XtraBackup 2.4 版。
您可以使用 Percona XtraBackup 來建立 MySQL 資料庫檔案的完整備份。或者,如果您已使用 Percona XtraBackup 來備份 MySQL 資料庫檔案,您可以上傳現有的完整和增量備份目錄與檔案。
如需使用 Percona XtraBackup 備份資料庫的詳細資訊,請參閱 Percona 網站上的 Percona XtraBackup - 文件
使用 Percona XtraBackup 來建立完整備份
若要建立 Amazon RDS 可以從 Amazon S3 還原之 MySQL 資料庫檔案的完整備份,請使用 Percona XtraBackup 公用程式 (xtrabackup
)。
例如,下列命令會建立 MySQL 資料庫的備份,並將檔案儲存在 /on-premises/s3-restore/backup
資料夾中。
xtrabackup --backup --user=
myuser
--password=password
--target-dir=/on-premises/s3-restore/backup
如果您想要將備份壓縮為單一檔案,之後可以視需要分割成多個檔案,您可以根據 MySQL 版本將備份儲存為下列其中一種格式:
Gzip (.gz) – 適用於 MySQL 5.7 和更低版本
tar (.tar) – 適用於 MySQL 5.7 和更低版本
Percona xbstream (.xbstream) – 適用於所有 MySQL 版本
注意
Percona XtraBackup 8.0 及更高版本僅支援 Percona xbstream 壓縮。
MySQL 5.7 和更低版本
下列命令建立 MySQL 資料庫的備份,並分割成多個 Gzip 檔案。將值取代為您自己的資訊。
xtrabackup --backup --user=
my_user
--password=password
--stream=tar \ --target-dir=/on-premises/s3-restore/backup
| gzip - | split -d --bytes=500MB \ -/on-premises/s3-restore/backup/backup
.tar.gz
MySQL 5.7 和更低版本
下列命令建立 MySQL 資料庫的備份,並分割成多個 tar 檔案。將值取代為您自己的資訊。
xtrabackup --backup --user=
my_user
--password=password
--stream=tar \ --target-dir=/on-premises/s3-restore/backup
| split -d --bytes=500MB \ -/on-premises/s3-restore/backup/backup
.tar
所有 MySQL 版本
下列命令建立 MySQL 資料庫的備份,並分割成多個 xbstream 檔案。將值取代為您自己的資訊。
xtrabackup --backup --user=
myuser
--password=password
--stream=xbstream \ --target-dir=/on-premises/s3-restore/backup
| split -d --bytes=500MB \ -/on-premises/s3-restore/backup/backup
.xbstream
注意
如果您看到以下錯誤,可能是因為您在命令中混合了檔案格式:
ERROR:/bin/tar: This does not look like a tar archive
透過 Percona XtraBackup 來使用增量備份
如果您已使用 Percona XtraBackup 來執行 MySQL 資料庫檔案的完整和增量備份,則不需要建立完整備份並將備份檔案上傳至 Amazon S3。相反地,為了節省時間,請將現有的備份目錄和檔案複製到 Amazon S3 儲存貯體。如需使用 Percona XtraBackup 建立增量備份的詳細資訊,請參閱 Percona 網站上的建立增量備份
將現有的完整和增量備份檔案複製到 Amazon S3 儲存貯體時,您必須遞迴複製基本目錄的內容。這些內容包括完整備份和所有增量備份目錄和檔案。此副本必須保留 Amazon S3 儲存貯體中的目錄結構。Amazon RDS 會逐一查看所有檔案和目錄。Amazon RDS 使用每個增量備份隨附的 xtrabackup-checkpoints
檔案來識別基礎目錄,並依日誌序號 (LSN) 範圍排序增量備份。
Percona XtraBackup 的備份考量
Amazon RDS 根據檔案名稱來取用備份檔案。根據檔案格式,以適當的副檔名命名您的備份檔案。例如,.xbstream
針對使用 Percona xbstream 格式存放的檔案使用 。
Amazon RDS 依字母順序和自然數順序來取用備份檔案。為了確保您的備份檔案是以適當的順序寫入和命名,請在發出xtrabackup
命令時使用 split
選項。
Amazon RDS 不支援使用 Percona XtraBackup 所建立的局部備份。當您備份資料庫的來源檔案時,無法使用下列選項來建立部分備份:
-
--tables
-
--tables-exclude
-
--tables-file
-
--databases
-
--databases-exclude
-
--databases-file
手動建立 IAM 角色
如果沒有,您可以手動建立新的 IAM 角色。不過,如果您使用 還原資料庫 AWS Management Console,建議您選擇讓 Amazon RDS 為您建立新的 IAM 角色。若要讓 Amazon RDS 為您建立此角色,請遵循 將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體一節中的程序。
若要手動建立新的 IAM 角色以從 Amazon S3 匯入資料庫,請建立角色以將 Amazon RDS 的許可委派給 Amazon S3 儲存貯體。當您建立 IAM 角色時,您需要附加信任和許可政策。若要從 Amazon S3 匯入備份檔案,請使用類似下列範例的信任和許可政策。如需建立角色的詳細資訊,請參閱建立角色以將許可委派給 AWS 服務。
信任和許可政策規定您必須提供 Amazon Resource Name (ARN)。如需 ARN 格式的詳細資訊,請參閱 Amazon Resource Name (ARNs AWS 和服務命名空間。
範例 從 Amazon S3 匯入的信任政策
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }
範例 從 Amazon S3 匯入 的許可政策 — IAM 使用者許可
在下列範例中,將 iam_user_id
取代為您自己的值。
{ "Version":"2012-10-17", "Statement": [ { "Sid":"AllowS3AccessRole", "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::
iam_user_id
:role/S3Access" } ] }
範例 從 Amazon S3 匯入的 許可政策 — 角色許可
在下列範例中,將 amzn-s3-demo-bucket
和 字首
取代為您自己的值。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/prefix
*" }, { // If your bucket is encrypted, include the following permission. This permission allows decryption of your AWS KMS key. "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:region
:customer_id
:key/key_id
*" ] } ] }
注意
如果包含檔案名稱字首,請在字首後面加上星號 (*)。如果您不想指定字首,則指定星號即可。
將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體
您可以使用 AWS Management Console AWS CLI或 RDS API,將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體。
從 Amazon S3 將資料匯入新的 MySQL 資料庫執行個體
-
登入 AWS Management Console ,並在 https://console.aws.amazon.com/rds/
:// 開啟 Amazon RDS 主控台。 -
在 Amazon RDS 主控台的右上角,選擇您要建立資料庫執行個體 AWS 區域 的 。選擇與包含資料庫備份的 Amazon S3 儲存貯體 AWS 區域 相同的 。
-
在導覽窗格中,選擇 Databases (資料庫)。
-
選擇 Restore From S3 (從 S3 還原)。
系統會顯示 Create database by restoring from S3 (從 S3 還原以建立資料庫) 頁面。
-
在 S3 來源下:
-
選擇包含備份的 S3 bucket (S3 儲存貯體)。
-
(選用) 對於 S3 字首,輸入存放在 Amazon S3 儲存貯體中的檔案的檔案路徑字首。
如果您未指定字首,則 Amazon RDS 會使用 S3 儲存貯體根資料夾中的所有檔案和資料夾來建立資料庫執行個體。如果您指定字首,Amazon RDS 會使用 S3 儲存貯體中的檔案和資料夾建立資料庫執行個體,其中檔案的路徑以指定的字首開頭。
例如,您將備份檔案存放在名為備份的 S3 子資料夾中,而且您擁有多組備份檔案,每個備份檔案都在自己的目錄中 (gzip_backup1、gzip_backup2 等)。在此情況下,若要從 gzip_backup1 資料夾中的檔案還原,您可以指定前綴 backups/gzip_backup1。
-
-
在 Engine options (引擎選項):
-
針對 Engine type (引擎類型),請選擇 MySQL。
-
在 Source engine version (來源引擎版本) 中,選擇來源資料庫的 MySQL 主要版本。
-
在引擎版本中,選擇 MySQL 主要版本的預設次要版本 AWS 區域。
在 中 AWS Management Console,只有預設次要版本可用。完成匯入後,您可以升級資料庫執行個體。
-
-
對於 IAM 角色,請使用允許 Amazon RDS 存取 Amazon S3 儲存貯體的必要信任政策和許可政策來建立或選擇 IAM 角色。執行下列動作之一:
(建議) 選擇建立新角色,然後輸入 IAM 角色名稱。使用此選項時,Amazon RDS 會自動為您建立具有信任政策和許可政策的角色。
選擇現有的 IAM 角色。請確定此角色符合 中的所有條件手動建立 IAM 角色。
-
指定您的資料庫執行個體資訊。如需每項設定的相關資訊,請參閱 資料庫執行個體的設定。
注意
請務必為您的新資料庫執行個體配置足夠的儲存空間,以便還原操作成功。
若要自動允許未來成長,請在其他儲存組態下,選擇啟用儲存體自動調整規模。
-
視需要選擇其他設定。
-
選擇 Create database (建立資料庫)。
若要使用 將資料從 Amazon S3 匯入至新的 MySQL 資料庫執行個體 AWS CLI,請使用下列選項執行 restore-db-instance-from-s3 命令。如需每項設定的相關資訊,請參閱 資料庫執行個體的設定。
注意
請務必為您的新資料庫執行個體配置足夠的儲存空間,以便還原操作成功。
若要啟用儲存體自動擴展並允許未來自動成長,請使用 --max-allocated-storage
選項。
--allocated-storage
--db-instance-identifier
--db-instance-class
--engine
--master-username
--manage-master-user-password
--s3-bucket-name
--s3-ingestion-role-arn
--s3-prefix
--source-engine
--source-engine-version
範例
對於 Linux、 macOS或 Unix:
aws rds restore-db-instance-from-s3 \ --allocated-storage
250
\ --db-instance-identifiermy_identifier
\ --db-instance-classdb.m5.large
\ --enginemysql
\ --master-usernameadmin
\ --manage-master-user-password \ --s3-bucket-nameamzn-s3-demo-bucket
\ --s3-ingestion-role-arnarn:aws:iam::account-number:role/rolename
\ --s3-prefixbucket_prefix
\ --source-enginemy_sql
\ --source-engine-version8.0.32
\ --max-allocated-storage1000
在 Windows 中:
aws rds restore-db-instance-from-s3 ^ --allocated-storage
250
^ --db-instance-identifiermy_identifier
^ --db-instance-classdb.m5.large
^ --enginemysql
^ --master-usernameadmin
^ --manage-master-user-password ^ --s3-bucket-nameamzn-s3-demo-bucket
^ --s3-ingestion-role-arnarn:aws:iam::account-number:role/rolename
^ --s3-prefixbucket_prefix
^ --source-enginemysql
^ --source-engine-version8.0.32
^ --max-allocated-storage1000
若要使用 Amazon RDS API 從 Amazon S3 將資料匯入新的 MySQL 資料庫執行個體,請呼叫 RestoreDBInstanceFromS3 操作。
從 Amazon S3 匯入備份檔案到 Amazon RDS 的限制和考量事項
下列限制和考量適用於將備份檔案從 Amazon S3 匯入 RDS for MySQL 資料庫執行個體:
-
您只能將資料遷移至新的資料庫執行個體,不能遷移至現有的資料庫執行個體。
-
您必須使用 Percona XtraBackup 將資料備份到 Amazon S3。如需詳細資訊,請參閱建立資料庫備份。
-
Amazon S3 儲存貯體和 RDS for MySQL 資料庫執行個體必須位於相同的 中 AWS 區域。
-
您無法從下列來源還原:
-
資料庫執行個體快照匯出至 Amazon S3。您也無法將資料從資料庫執行個體快照匯出遷移至 Amazon S3 儲存貯體。
-
加密的來源資料庫。不過,您可以加密要遷移的資料。您也可以在遷移過程中維持不加密資料。
-
MySQL 5.5 或 5.6 資料庫。
-
-
RDS for MySQL 不支援 Percona Server for MySQL 做為來源資料庫,因為它可以包含 中的
compression_dictionary*
資料表mysql schema
。 -
RDS for MySQL 不支援主要版本或次要版本的回溯遷移。例如,您無法從 MySQL 8.0 版遷移至 RDS for MySQL 5.7,也無法從 MySQL 8.0.32 版遷移至 RDS for MySQL 8.0.26 版。
-
Amazon RDS 不支援從 Amazon S3 匯入 db.t2.micro 資料庫執行個體類別。不過,您可以還原至不同的資料庫執行個體類別,稍後再變更資料庫執行個體類別。如需執行個體類別的詳細資訊,請參閱 的資料庫執行個體類別的硬體規格。
-
Amazon S3 將上傳至 Amazon S3 儲存貯體的檔案大小限制為 5 TB。如果備份檔案超過 5 TB,您必須將備份檔案分割為較小的檔案。
-
Amazon RDS 將上傳至 Amazon S3 儲存貯體的檔案數量限制為 1 百萬個。如果資料庫的備份資料 (包括所有完整和增量備份) 超過 1 百萬個檔案,請使用 Gzip (.gz)、tar (.tar.gz) 或 Percona xbstream (.xbstream) 檔案將完整和增量備份檔案儲存在 Amazon S3 儲存貯體中。Percona XtraBackup 8.0 只支援壓縮時的 Percona xbstream。
-
為了為每個資料庫執行個體提供管理服務,Amazon RDS 會在建立資料庫執行個體時建立
rdsadmin
使用者。由於rdsamin
是 Amazon RDS 中的預留使用者,因此適用下列限制:-
Amazon RDS 不會使用
'rdsadmin'@'localhost'
定義器匯入函數、程序、檢視、事件和觸發。如需詳細資訊,請參閱以 'rdsamin'@'localhost' 做為定義器的存放物件及主要使用者帳戶權限。 -
建立資料庫執行個體時,Amazon RDS 會建立具有最大支援權限的主要使用者。從備份還原時,Amazon RDS 會自動移除指派給匯入使用者的任何不支援權限。
若要找出可能受此影響的使用者,請參閱 具有不支援權限的使用者帳戶。如需 RDS for MySQL 中支援權限的詳細資訊,請參閱 RDS 適用於 My 的角色型權限模型SQL。
-
-
Amazon RDS
mysql
不會遷移使用者在結構描述中建立的資料表。 -
您必須只使用一個使用預設資料檔案名稱 的資料檔案來設定
innodb_data_file_path
參數ibdata1:12M:autoextend
。您可以使用此方法,使用兩個資料檔案或不同名稱的資料檔案來遷移資料庫。下列範例是 Amazon RDS 不允許的檔案名稱:
-
innodb_data_file_path=ibdata1:50M
-
ibdata2:50M:autoextend
-
innodb_data_file_path=ibdata01:50M:autoextend
-
-
如果來源資料庫有資料表是在預設 MySQL 資料目錄外定義,您無法從這個來源資料庫遷移。
-
使用此方法的未壓縮備份支援的大小上限為 64 TiB。對於壓縮備份,此限制會較低,以因應解壓縮空間需求。在這種情況下,支援的備份大小上限為
64 TiB - compressed backup size
。如需 RDS for MySQL 支援的資料庫大小上限的相關資訊,請參閱 一般用途 SSD 儲存體和 佈建 IOPS SSD 儲存體。
-
Amazon RDS 不支援匯入 MySQL 和其他外部元件和外掛程式。
-
Amazon RDS 不會從您的資料庫還原所有項目。建議您從來源 MySQL 系統資料庫儲存下列項目的資料庫結構描述和值,然後在建立後將其新增至還原的 RDS for MySQL 資料庫執行個體:
-
使用者帳戶
-
函數
-
預存程序
-
時區資訊。時區資訊會從 RDS for MySQL 資料庫執行個體的本機作業系統載入。如需詳細資訊,請參閱MySQL 資料庫執行個體的本機時區。
-
以 'rdsamin'@'localhost' 做為定義器的存放物件
Amazon RDS 不會以 'rdsadmin'@'localhost'
作為定義者匯入函數、程序、檢視、事件和觸發。
您可以在來源 MySQL 資料庫上使用以下 SQL 指令碼列出具有不支援 DEFINER 的預存物件。
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer. SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM information_schema.routines WHERE definer = 'rdsadmin@localhost'; -- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer. SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER FROM information_schema.triggers WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists events with `rdsadmin`@`localhost` as the definer. SELECT EVENT_SCHEMA, EVENT_NAME FROM information_schema.events WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists views with `rdsadmin`@`localhost` as the definer. SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.views WHERE DEFINER = 'rdsadmin@localhost';
具有不支援權限的使用者帳戶
具有 RDS for MySQL 不支援權限的使用者帳戶會在沒有不支援權限的情況下匯入。如需支援的權限清單,請參閱 RDS 適用於 My 的角色型權限模型SQL。
您可以在來源資料庫上執行下列 SQL 查詢,以列出具有不支援權限的使用者帳戶。
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'y' OR File_priv = 'y' OR Super_priv = 'y' OR Create_tablespace_priv = 'y';