共用方式為


使用重新導向連線到適用於 MySQL 的 Azure 資料庫

適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事

本文說明如何使用重新導向模式將應用程式連線到您的適用於 MySQL 的 Azure 資料庫伺服器。 重新導向會藉由允許應用程式直接連線到後端伺服器節點,以減少用戶端應用程式和 MySQL 伺服器之間的網路延遲。

開始之前

登入 Azure 入口網站。 建立具有引擎版本 5.6、5.7 或 8.0 的適用於 MySQL 的 Azure 資料庫伺服器。

如需詳細資訊,請參閱如何使用 Azure 入口網站Azure CLI 建立適用於 MySQL 的 Azure 資料庫伺服器。

重要

適用於 MySQL 的 Azure 資料庫的 Private Link 目前不支援重新導向。

啟用重新導向

在您的適用於 MySQL 的 Azure 資料庫伺服器上,將 redirect_enabled 參數設定為 ON 以允許使用重新導向模式的連線。 若要更新此伺服器參數,請使用 Azure 入口網站Azure CLI

PHP

PHP 應用程式中的重新導向支援可透過 Microsoft 所開發的 mysqlnd_azure \(英文\) 延伸模組來取得。

mysqlnd_azure 延伸模組可透過 PECL 新增至 PHP 應用程式,因此強烈建議透過正式發行的 PECL 套件 \(英文\) 來安裝並設定延伸模組。

重要

PHP mysqlnd_azure \(英文\) 延伸模組中的重新導向支援目前為預覽狀態。

重新導向邏輯

重要

重新導向邏輯/行為開始版本 1.1.0 已更新,建議使用版本 1.1.0+

重新導向行為取決於 mysqlnd_azure.enableRedirect 的值。 下表根據此參數的值 (從版本 1.1.0+ 開始),列出重新導向的行為。

如果您使用較舊版本的 mysqlnd_azure 延伸模組 (1.0.0-1.0.3 版),則重新導向行為取決於 mysqlnd_azure.enabled 的值。 有效值為 off (與下表中所述的行為類似) 和 on (作用如下表中的 preferred)。

mysqlnd_azure.enableRedirect 值 行為
off0 不會使用重新導向。
on1 - 如果連線未在驅動程式端使用 SSL,則不會建立任何連線。 將傳回下列錯誤:[mysqlnd_azure.enableRedirect 是 on,但連接字串中未設定 SSL 選項。只有使用 SSL 才能重新導向。]
- 如果在驅動程式端使用 SSL,但伺服器不支援重新導向,則會中止第一個連線,並傳回下列錯誤:[連線已中止,因為在 MySQL 伺服器上未啟用重新導向,或網路套件不符合重新導向通訊協定。]
- 如果 MySQL 伺服器支援重新導向,但因為任何原因而導致重新導向連線失敗,系統也會中止第一個 Proxy 連線。 傳回重新導向連線的錯誤。
preferred2
(預設值)
- mysqlnd_azure 會盡可能使用重新導向。
- 如果連線在驅動程式端不使用 SSL,則伺服器不支援重新導向,或者當重新導向因任何不嚴重原因而無法連線,但 Proxy 連線仍然有效時,系統會切換回第一個 Proxy 連線。

若要使用 mysqlnd_azure.enableRedirect 成功連線到適用於 MySQL 的 Azure 資料庫單一伺服器,您必須遵循根據合規性需求合併根憑證的必要步驟。 如需詳細資料,請瀏覽連結

文件的後續章節將會概述如何使用 PECL 安裝 mysqlnd_azure 延伸模組,並設定此參數的值。

先決條件

  • PHP 版本 7.2.15+ 和 7.3.2+
  • PHP PEAR
  • php-mysql
  • 適用於 MySQL 的 Azure 資料庫伺服器
  1. 使用 PECL \(英文\) 安裝 mysqlnd_azure \(英文\)。 建議使用 1.1.0+ 版。

    sudo pecl install mysqlnd_azure
    
  2. 藉由執行下面命令,來找出延伸模組目錄 (extension_dir):

    php -i | grep "extension_dir"
    
  3. 將目錄變更為傳回的資料夾,並確定 mysqlnd_azure.so 位於此資料夾中。

  4. 執行下面命令,找出 .ini 檔案的資料夾:

    php -i | grep "dir for additional .ini files"
    
  5. 將目錄變更為此傳回資料夾。

  6. 建立 mysqlnd_azure 的新 .ini 檔案。 請確定名稱的字母順序是在 mysqnld 之後,因為模組是根據 ini 檔案的名稱順序載入。 例如,如果 mysqlnd .ini 的名稱是 10-mysqlnd.ini,請將 mysqlnd ini 命名為 20-mysqlnd-azure.ini

  7. 在新的 .ini 檔案中,新增下列幾行以啟用重新導向。

    extension=mysqlnd_azure
    mysqlnd_azure.enableRedirect = on/off/preferred
    

確認重新導向

您也可以使用下列範例 PHP 程式碼來確認重新導向。 建立名為 mysqlConnect.php 的 PHP 檔案,並貼上下面的程式碼。 以您自己的伺服器名稱、使用者名稱和密碼加以更新。

<?php
$host = '<yourservername>.mysql.database.azure.com';
$username = '<yourusername>@<yourservername>';
$password = '<yourpassword>';
$db_name = 'testdb';
  echo "mysqlnd_azure.enableRedirect: ", ini_get("mysqlnd_azure.enableRedirect"), "\n";
  $db = mysqli_init();
  //The connection must be configured with SSL for the redirection test
  $link = mysqli_real_connect ($db, $host, $username, $password, $db_name, 3306, NULL, MYSQLI_CLIENT_SSL);
  if (!$link) {
     die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
  }
  else {
    echo $db->host_info, "\n"; //if redirection succeeds, the host_info will differ from the hostname you used used to connect
    $res = $db->query('SHOW TABLES;'); //test query with the connection
    print_r ($res);
    $db->close();
  }
?>

下一步

  • 如需連接字串的詳細資訊,請參閱連接字串