本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用外部來源執行個體設定二進位日誌檔案位置複寫
您可使用二進位日誌檔案複寫,在 RDS for MySQL 或 MariaDB 資料庫執行個體,以及位於 Amazon RDS 外部的 MySQL 或 MariaDB 執行個體之間,設定複寫。
開始之前
您可以使用複寫交易的二進制日誌檔案位置設定複寫。
在 Amazon RDS 資料庫執行個體上啟動複寫功能所需的許可有其限制,不供 Amazon RDS 主要使用者使用。因此,請確定使用 Amazon RDS mysql.rds_set_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 或 mysql.rds_set_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 和 mysql.rds_start_replication 命令,設定即時資料庫與 Amazon RDS 資料庫之間的複寫作業。
若要為 MySQL 或 MariaDB 資料庫設定二進位日誌記錄格式,請更新 binlog_format 參數。如果資料庫執行個體使用預設的資料庫執行個體參數群組,請建立新的資料庫參數群組以修改 binlog_format 參數。在 MariaDB 和 MySQL 8.0 和較低版本中,binlog_format 預設為 MIXED。不過,如果需要特定的二進位日誌 (binlog) 格式,也可以將 binlog_format 設定為 ROW 或 STATEMENT。重新啟動資料庫執行個體,讓變更生效。在 MySQL 8.4 和更高版本中,binlog_format 預設為 ROW。
如需有關設定 binlog_format 參數的資訊,請參閱為單一可用區域資料庫設定 RDS for MySQL 二進位記錄。如需各種 MySQL 複寫類型隱含意義的相關資訊,請參閱 MySQL 文件中的基於陳述式和基於列的複寫的優缺點
使用外部來源執行個體設定二進位日誌檔案位置複寫
在 Amazon RDS 上設定外部來源執行個體和複本時,按照這些準則操作:
監控 Amazon RDS 資料庫執行個體 (您的複本) 的容錯移轉事件。若發生容錯移轉,資料庫執行個體 (您的複本) 可能會以不同的網路地址,在新主機上重新建立。如需如何監控容錯移轉事件的資訊,請參閱使用 Amazon RDS 事件通知。
直到您已驗證二進位日誌已套用至複本前,都要將二進位日誌保存在來源執行個體上。如此一來,發生故障時,這種維護可確保您能夠還原來源執行個體。
開啟 Amazon RDS 資料庫執行個體的自動備份功能。如果您需要重新同步來源執行個體與複本,開啟自動備份功能可確保您能夠將複本還原至特定時間點。如需備份和 point-in-time 恢復的相關資訊,請參閱 備份、還原和匯出資料 一文。
使用外部來源執行個體設定二進位日誌檔案複寫
-
將來源 MySQL 或 MariaDB 執行個體設成唯讀狀態。
mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON; -
在來源 MySQL 或 MariaDB 執行個體上執行
SHOW MASTER STATUS命令,以確定二進位日誌的位置。您會獲得類似下列範例的輸出。
File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------ -
使用
mysqldump,從外部執行個體將資料庫複製到 Amazon RDS 資料庫執行個體。如果是非常大型的資料庫,您可能需要使用 以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫 中的程序。針對 Linux、macOS 或 Unix:
mysqldump --databasesdatabase_name\ --single-transaction \ --compress \ --order-by-primary \ -ulocal_user\ -plocal_password| mysql \ --host=hostname \ --port=3306 \ -uRDS_user_name\ -pRDS_password在 Windows 中:
mysqldump --databasesdatabase_name^ --single-transaction ^ --compress ^ --order-by-primary ^ -ulocal_user^ -plocal_password| mysql ^ --host=hostname ^ --port=3306 ^ -uRDS_user_name^ -pRDS_password注意
請注意
-p選項與輸入的密碼之間不能有空格。若要指定連線到 Amazon RDS 資料庫執行個體的主機名稱、使用者名稱、連接埠和密碼,請使用
--host命令中的--user (-u)、--port、-p和mysql選項。主機名稱是 Amazon RDS 資料庫執行個體端點的網域名稱服務 (DNS) 名稱,例如myinstance.123456789012.us-east-1.rds.amazonaws.com。您可在 the console的執行個體詳細資訊中找到端點值。 -
將來源 MySQL 或 MariaDB 執行個體重新設為可寫入狀態。
mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;如需如何製作備份以搭配複寫作業使用的詳細資訊,請參閱 MySQL 文件
。 -
在 中 the console,將託管外部資料庫的伺服器的 IP 地址新增至 Amazon RDS 資料庫執行個體的虛擬私有雲端 (VPC) 安全群組。如需有關修改 VPC 安全群組的詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的 VPC 安全群組。
IP 地址會在滿足下列條件時變更:
-
您使用公有 IP 地址供外部來源執行個體和資料庫執行個體通訊。
-
外部來源執行個體停止後又重新啟動。
如果符合這些條件,請先驗證 IP 地址再新增它。
您可能還需要設定本機網路,以允許從 Amazon RDS 資料庫執行個體的 IP 地址建立連線。如此,您的本機網路就能與外部 MySQL 或 MariaDB 執行個體進行通訊。若要尋找 Amazon RDS 資料庫執行個體的 IP 地址,請使用
host命令。hostdb_instance_endpoint主機名稱是 Amazon RDS 資料庫執行個體端點的 DNS 名稱。
-
-
使用您選擇的用戶端連線至外部執行個體,接著建立執行複寫作業所需的使用者。只對於複寫作業使用此帳戶,並限制其存取您的網域,以提升安全性。下列是 範例。
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';注意
指定此處所顯示提示以外的密碼,作為安全最佳實務。
-
若為外部執行個體,請將
REPLICATION CLIENT和REPLICATION SLAVE權限授予複寫使用者。舉例來說,若要將所有資料庫的REPLICATION CLIENT和REPLICATION SLAVE權限授予您網域中的「repl_user」使用者,請發出下列命令。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com'; -
將 Amazon RDS 資料庫執行個體設為複本。若要執行此操作,請先以主要使用者身分連線至 Amazon RDS 資料庫執行個體。使用 mysql.rds_set_external_source (RDS for MySQL 主要版本 8.4 及更新版本) 或 mysql.rds_set_external_master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 命令識別外部 MySQL 或 MariaDB 資料庫,將其視為來源執行個體。使用您在步驟 2 中所確定的主控端日誌檔案名稱與主控端日誌位置。下列命令為範例。
MySQL 8.4
CALL mysql.rds_set_external_source ('mysourceserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031',107,1);MariaDB 和 MySQL 8.0 與 5.7
CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031',107,1);注意
在 RDS for MySQL 上,您可以改為執行 mysql.rds_set_external_source_with_delay (RDS for MySQL 主要版本 8.4 及更新版本) 或 mysql.rds_set_external_master_with_delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本) 預存程序,進而選擇使用延遲複寫。在 RDS for MySQL 上,使用延遲複寫的原因之一,是為了透過 mysql.rds_start_replication_until 預存程序來開啟災難復原功能。目前,RDS for MariaDB 支援延遲複寫,但不支援
mysql.rds_start_replication_until程序。 -
在 Amazon RDS 資料庫執行個體上發出 mysql.rds_start_replication 命令,啟動複寫作業。
CALL mysql.rds_start_replication;