本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將備份還原至 Amazon RDS for MySQL 資料庫執行個體
Amazon RDS 支援使用備份檔案來匯入 MySQL 資料庫。您可以建立資料庫的備份,並將備份檔案存放在 Amazon S3,接著將備份檔案還原至執行 MySQL 的新 Amazon RDS 資料庫執行個體。Amazon RDS 支援在所有 AWS 區域中從 Amazon S3 匯入備份檔案。
本節所述的案例會還原內部部署資料庫的備份。只要資料庫可供存取,您就可以將此技術用於其他位置的資料庫,例如 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 根據檔案名稱來取用備份檔案。請根據檔案格式,以適當的副檔名命名您的備份檔案。例如,對於使用 Percona xbstream 格式存放的檔案,請使用 .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 匯入時的信任原則
範例 從 Amazon S3 匯入時的許可原則 — IAM 使用者許可
在下列範例中,將 iam_user_id 取代為您自己的值。
範例 從 Amazon S3 匯入時的許可原則 — 角色許可
在下列範例中,將 amzn-s3-demo-bucket 和 prefix 取代為您自己的值。
注意
如果包含檔案名稱字首,請在字首後面加上星號 (*)。如果您不想指定字首,則指定星號即可。
將資料從 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 中一個名為 backups 的子資料夾,而且有多組備份檔案,各存放於自己的目錄中 (gzip_backup1、gzip_backup2 等等)。在此案例中,若要從 gzip_backup1 資料夾中的檔案還原,應指定字首 backups/gzip_backup1。
-
-
在 Engine options (引擎選項):
-
針對 Engine type (引擎類型),請選擇 MySQL。
-
在 Source engine version (來源引擎版本) 中,選擇來源資料庫的 MySQL 主要版本。
-
針對版本,在 AWS 區域中選擇您 MySQL 主要版本的預設次要版本。
在 中 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-storage250\ --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-storage250^ --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 做為來源資料庫,因為其
mysql schema結構描述中可能包含compression_dictionary*資料表。 -
RDS for MySQL 不支援主要版本或次要版本的回溯遷移。例如,您無法從 MySQL 8.0 版遷移至 RDS for MySQL 5.7 版,也無法從 MySQL 8.0.32 版遷移至 RDS for MySQL 8.0.26 版。
-
Amazon RDS 不支援在 db.t2.micro 資料庫執行個體類別上從 Amazon S3 匯入。不過,您可以先還原至不同的資料庫執行個體類別,後續再變更資料庫執行個體類別。如需執行個體類別的詳細資訊,請參閱 的資料庫執行個體類別的硬體規格。
-
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 for MySQL 的角色型權限模型。
-
-
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 for MySQL 的角色型權限模型。
您可以在來源資料庫上執行下列 SQL 查詢,以列出具有不支援權限的使用者帳戶。
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'y' OR File_priv = 'y' OR Super_priv = 'y' OR Create_tablespace_priv = 'y';