你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用重定向连接到 Azure Database for MariaDB

本主题介绍了如何使用重定向模式将应用程序连接到 Azure Database for MariaDB 服务器。 重定向是为了减小客户端应用程序与 MariaDB 服务器之间的网络延迟,因为它允许应用程序直接连接到后端服务器节点。

准备阶段

登录到 Azure 门户。 使用引擎版本 10.2 或 10.3 创建 Azure Database for MariaDB 服务器。

有关详细信息,请参阅如何使用 Azure 门户Azure CLI 创建 Azure Database for MariaDB 服务器。

重要

适用于 Azure Database for MariaDB 的专用链接目前不支持重定向。

启动重定向

在 Azure Database for MariaDB 服务器中,将 redirect_enabled 参数配置为 ON 以允许与重定向模式建立连接。 要更新该服务器参数,请使用 Azure 门户Azure CLI

PHP

PHP 应用程序中的重定向支持是通过 Microsoft 开发的 mysqlnd_azure 扩展提供的。

可以通过 PECL 将 mysqlnd_azure 扩展添加到 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,但服务器不支持重定向,则第一个连接将中止并返回以下错误:“由于 MariaDB 服务器上未启用重定向或者网络数据包不符合重定向协议,连接已中止。”
- 如果 MariaDB 服务器支持重定向,但重定向的连接出于任何原因而失败,则还会中止第一个代理连接。 返回重定向连接错误。
preferred2
(默认值)
- mysqlnd_azure 将尽可能使用重定向。
- 如果连接未在驱动程序端使用 SSL,则服务器不支持重定向,或者重定向的连接由于任何非致命原因而无法连接,而代理连接仍然有效,则服务器将回退到第一个代理连接。

本文档的后续部分将概述如何使用 PECL 安装 mysqlnd_azure 扩展并设置此参数的值。

Ubuntu Linux

先决条件

  • PHP 版本 7.2.15+ 和 7.3.2+
  • PHP PEAR
  • php-mysql
  • Azure Database for MariaDB 服务器
  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
    

Windows

先决条件

  • PHP 版本 7.2.15+ 和 7.3.2+
  • php-mysql
  • Azure Database for MariaDB 服务器
  1. 运行以下命令来确定运行的是 x64 还是 x86 版本的 PHP:

    php -i | findstr "Thread"
    
  2. PECL 中下载与你的 PHP 版本匹配的相应 x64 或 x86 版 mysqlnd_azure DLL。 建议使用版本 1.1.0+。

  3. 解压缩 zip 文件,并找到名为 php_mysqlnd_azure.dll 的 DLL。

  4. 运行以下命令找到扩展目录 (extension_dir):

    php -i | find "extension_dir"
    
  5. php_mysqlnd_azure.dll 文件复制到步骤 4 返回的目录中。

  6. 使用以下命令找到包含 php.ini 文件的 PHP 文件夹:

    php -i | find "Loaded Configuration File"
    
  7. 修改 php.ini 文件,并添加以下额外的行来启用重定向。

    在“Dynamic Extensions”部分下:

    extension=mysqlnd_azure
    

    在“Module Settings”部分下:

    [mysqlnd_azure]
    mysqlnd_azure.enableRedirect = on/off/preferred
    

确认重定向

还可以使用以下示例 PHP 代码来确认是否已配置重定向。 创建名为 mysqlConnect.php 的 PHP 文件并粘贴以下代码。 使用你自己的值更新服务器名称、用户名和密码。

<?php
$host = '<yourservername>.mariadb.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 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();
  }
?>

后续步骤

有关连接字符串的详细信息,请参阅连接字符串