在 適用於 MariaDB 的 Azure 資料庫 中設定數據傳入複寫

重要

適用於 MariaDB 的 Azure 資料庫 位於淘汰路徑上。 強烈建議您移轉至 適用於 MySQL 的 Azure 資料庫。 如需移轉至 適用於 MySQL 的 Azure 資料庫 的詳細資訊,請參閱 適用於 MariaDB 的 Azure 資料庫 發生什麼事?

本文說明如何藉由設定來源和複本伺服器,在 適用於 MariaDB 的 Azure 資料庫 中設定數據輸入複寫。 本文假設您先前有過一些 MariaDB 伺服器和資料庫的經驗。

若要在 適用於 MariaDB 的 Azure 資料庫 服務中建立複本,數據輸入複寫會同步處理內部部署來源 MariaDB 伺服器、虛擬機(VM)或雲端資料庫服務中的數據。 資料輸入複寫是建立在以二進位記錄 (binlog) 檔案位置為基礎的 MariaDB 原生複寫之上。 若要深入瞭解二進位記錄複寫,請參閱 binlog 複寫概觀

請先檢閱 數據輸入複寫的限制和需求 ,再執行本文中的步驟。

注意

如果您的來源伺服器是 10.2 版或更新版本,建議您使用 全域交易標識碼來設定數據輸入複寫。

注意

本文包含「從屬」一詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

建立要作為複本使用的 MariaDB 伺服器

  1. 建立新的 適用於 MariaDB 的 Azure 資料庫 伺服器(例如,replica.mariadb.database.azure.com)。 伺服器是數據輸入複寫中的複本伺服器。

    若要了解伺服器建立,請參閱使用 Azure 入口網站 建立 適用於 MariaDB 的 Azure 資料庫 伺服器。

    重要

    您必須在一般用途或記憶體優化定價層中建立 適用於 MariaDB 的 Azure 資料庫 伺服器。

  2. 建立相同的用戶帳戶和對應的許可權。

    用戶帳戶不會從來源伺服器復寫到複本伺服器。 若要提供使用者對複本伺服器的存取權,您必須在新建立 適用於 MariaDB 的 Azure 資料庫 伺服器上手動建立所有帳戶和對應的許可權。

  3. 將來源伺服器的IP位址新增至複本的防火牆規則。

    使用 Azure 入口網站Azure CLI 更新防火牆規則。

設定來源伺服器

下列步驟會準備及設定裝載於內部部署、VM 或雲端資料庫服務中,以進行數據輸入複寫的 MariaDB 伺服器。 MariaDB 伺服器是數據輸入複寫中的來源。

  1. 在繼續之前,請先檢閱 主伺服器需求

  2. 請確定來源伺服器允許埠 3306 上的輸入和輸出流量,而且來源伺服器具有 公用 IP 位址、可公開存取 DNS 或具有完整功能變數名稱 (FQDN)。

    嘗試從裝載在另一部機器上的 MySQL 命令行,或從 Azure 入口網站 中提供的 Azure Cloud Shell 等工具連線到來源伺服器,以測試與來源伺服器的連線。

    如果您的組織有嚴格的安全策略,而且不允許來源伺服器上的所有IP位址啟用從 Azure 到來源伺服器的通訊,您可以使用下列命令來判斷 適用於 MariaDB 的 Azure 資料庫 伺服器的 IP 位址。

    1. 使用 MySQL 命令行之類的工具登入您的 適用於 MariaDB 的 Azure 資料庫。

    2. 執行下列查詢。

      SELECT @@global.redirect_server_host;
      

      以下是一些範例輸出:

      +-----------------------------------------------------------+
      | @@global.redirect_server_host                             |
      +-----------------------------------------------------------+
      | e299ae56f000.tr1830.westus1-a.worker.database.windows.net |
       +-----------------------------------------------------------+
      
    3. 從 MySQL 命令行結束。

    4. 在 ping 公用程式中執行下列 命令,以取得 IP 位址。

      ping <output of step 2b>
      

      例如:

      C:\Users\testuser> ping e299ae56f000.tr1830.westus1-a.worker.database.windows.net
      Pinging tr1830.westus1-a.worker.database.windows.net (**11.11.111.111**) 56(84) bytes of data.
      
    5. 設定來源伺服器的防火牆規則,以在埠 3306 中包含上一個步驟的輸出 IP 位址。

    注意

    此IP位址可能會因為維護/部署作業而變更。 這種連線方法僅適用於無法允許 3306 埠上所有 IP 位址的客戶。

  3. 開啟二進位記錄。

    若要查看主要複本上是否啟用二進位記錄,請輸入下列命令:

    SHOW VARIABLES LIKE 'log_bin';
    

    如果變數 log_bin 傳回值 ON,則會在您的伺服器上啟用二進位記錄。

    如果 log_bin 傳回值 OFF,請編輯 my.cnf 檔案, log_bin=ON 以便開啟二進位記錄。 重新啟動伺服器,讓變更生效。

  4. 設定來源伺服器設定。

    數據輸入複寫需要參數 lower_case_table_names 在來源和複本伺服器之間保持一致。 lower_case_table_names參數預設會在 適用於 MariaDB 的 Azure 資料庫 中設定為 1

    SET GLOBAL lower_case_table_names = 1;
    
  5. 建立新的複寫角色並設定許可權。

    在使用復寫許可權設定的來源伺服器上建立用戶帳戶。 您可以使用 SQL 命令或 MySQL Workbench 來建立帳戶。 如果您打算使用 SSL 進行複寫,則必須在建立使用者帳戶時指定此專案。

    若要瞭解如何在來源伺服器上新增用戶帳戶,請參閱 MariaDB 檔

    藉由使用下列命令,新的復寫角色可以從任何計算機存取來源,而不只是裝載來源本身的計算機。 針對此存取,請在 命令中指定 syncuser@『%』 來建立使用者。

    若要深入瞭解 MariaDB 檔,請參閱 指定帳戶名稱

    SQL 命令

    • 使用 SSL 進行復寫

      若要要求所有使用者連線使用 SSL,請輸入下列命令以建立使用者:

      CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
      GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%' REQUIRE SSL;
      
    • 沒有 SSL 的複寫

      如果所有連線都不需要 SSL,請輸入下列命令以建立使用者:

      CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
      GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
      

    MySQL Workbench

    若要在 MySQL Workbench 中建立複寫角色,請在 [ 管理 ] 窗格中選取 [ 使用者和許可權]。 然後選取 [ 新增帳戶]。

    Users and Privileges

    在 [ 登入名稱] 欄位中輸入使用者名稱

    Sync user

    選取 [管理員 角色] 面板,然後在 [全域許可權] 列表中,選取 [複寫從屬]。 選取 [ 套用 ] 以建立複寫角色。

    Replication Slave

  6. 將來源伺服器設定為唯讀模式。

    在傾印資料庫之前,伺服器必須處於唯讀模式。 在唯讀模式中,來源無法處理任何寫入交易。 為了協助避免業務影響,請在離峰期間排程只讀視窗。

    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only = ON;
    
  7. 取得目前的二進位記錄檔名稱和位移。

    若要判斷目前的二進位記錄檔名稱和位移,請執行 命令 show master status

    show master status;
    

    結果應該類似下表:

    Master Status Results

    請注意二進位檔名稱,因為它將在後續步驟中使用。

  8. 取得 GTID 位置(選擇性的,需要使用 GTID 進行複寫)。

    執行函式 BINLOG_GTID_POS 以取得對應 binlog 檔名和位移的 GTID 位置。

    select BINLOG_GTID_POS('<binlog file name>', <binlog offset>);
    

傾印和還原來源伺服器

  1. 從來源伺服器傾印所有資料庫。

    使用 mysqldump 傾印來源伺服器中的所有資料庫。 不需要傾印 MySQL 連結庫和測試連結庫。

    如需詳細資訊,請參閱 傾印和還原

  2. 將來源伺服器設定為讀取/寫入模式。

    傾印資料庫之後,將來源 MariaDB 伺服器變更回讀取/寫入模式。

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    
  3. 將傾印檔案還原至新的伺服器。

    將傾印檔案還原至在 適用於 MariaDB 的 Azure 資料庫 服務中建立的伺服器。 如需如何將傾印檔案還原至 MariaDB 伺服器,請參閱 傾印和還原

    如果傾印檔案很大,請在與複本伺服器相同的區域內,將其上傳至 Azure 中的 VM。 從 VM 將它還原至 適用於 MariaDB 的 Azure 資料庫 伺服器。

  1. 設定來源伺服器。

    所有數據傳入複寫函式都是由預存程式完成。 您可以在資料傳入複寫預存程式中找到所有程式。 預存程式可以在 MySQL 殼層或 MySQL Workbench 中執行。

    若要連結兩部伺服器並開始復寫,請登入 Azure DB for MariaDB 服務中的目標複本伺服器。 接下來,使用 mysql.az_replication_change_master 適用於 MariaDB 的 Azure DB 伺服器上的 或 mysql.az_replication_change_master_with_gtid 預存程式,將外部實例設定為來源伺服器。

    CALL mysql.az_replication_change_master('<master_host>', '<master_user>', '<master_password>', 3306, '<master_log_file>', <master_log_pos>, '<master_ssl_ca>');
    

    CALL mysql.az_replication_change_master_with_gtid('<master_host>', '<master_user>', '<master_password>', 3306, '<master_gtid_pos>', '<master_ssl_ca>');
    
    • master_host:來源伺服器的主機名
    • master_user:來源伺服器的用戶名稱
    • master_password:來源伺服器的密碼
    • master_log_file:執行中的二進位記錄檔名稱 show master status
    • master_log_pos:執行中的二進位記錄位置 show master status
    • master_gtid_pos:從執行中的 GTID 位置 select BINLOG_GTID_POS('<binlog file name>', <binlog offset>);
    • master_ssl_ca:CA 憑證的內容。 如果您未使用 SSL,請傳入空字串。*

    *建議傳入 master_ssl_ca 參數作為變數。 如需詳細資訊,請參閱下列範例。

    範例

    • 使用 SSL 進行復寫

      執行下列命令來建立變數 @cert

      SET @cert = '-----BEGIN CERTIFICATE-----
      PLACE YOUR PUBLIC KEY CERTIFICATE\'S CONTEXT HERE
      -----END CERTIFICATE-----'
      

      使用 SSL 的復寫是在裝載於網域 companya.com 的來源伺服器,以及裝載於 適用於 MariaDB 的 Azure 資料庫 中的複本伺服器之間設定。 此預存程式會在複本上執行。

      CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mariadb-bin.000016', 475, @cert);
      
    • 沒有 SSL 的複寫

      在裝載於網域 companya.com 的來源伺服器與裝載於 適用於 MariaDB 的 Azure 資料庫 中的複本伺服器之間,會設定不含 SSL 的復寫。 此預存程式會在複本上執行。

      CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mariadb-bin.000016', 475, '');
      
  2. 啟動複寫。

    mysql.az_replication_start呼叫預存程式以開始複寫。

    CALL mysql.az_replication_start;
    
  3. 檢查複寫狀態。

    show slave status在複本伺服器上呼叫 命令,以檢視複寫狀態。

    show slave status;
    

    如果 Slave_IO_RunningSlave_SQL_Running 處於 狀態 yes,且的值 Seconds_Behind_Master0,則復寫會正常運作。 Seconds_Behind_Master 表示複本的延遲程度。 如果值不是 0,則復本會處理更新。

  4. 更新對應的伺服器變數,讓數據輸入複寫更安全(僅適用於不含 GTID 的複寫)。

    由於 MariaDB 中的原生複寫限制,您必須在復寫時設定 sync_master_infosync_relay_log_info 變數,而不需要 GTID 案例。

    請檢查複本伺服器的 sync_master_infosync_relay_log_info 變數,以確定資料輸入複寫穩定,並將變數設定為 1

其他預存程式

停止複寫

若要停止來源和復本伺服器之間的複寫,請使用下列預存程式:

CALL mysql.az_replication_stop;

拿掉複寫關聯性

若要移除來源和復本伺服器之間的關聯性,請使用下列預存程式:

CALL mysql.az_replication_remove_master;

略過複寫錯誤

若要略過複寫錯誤並允許複寫,請使用下列預存程式:

CALL mysql.az_replication_skip_counter;

下一步

深入瞭解 適用於 MariaDB 的 Azure 資料庫 的數據內復寫。