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

适用于:Azure Database for MySQL - 单一服务器

重要

Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 有关如何迁移到 Azure Database for MySQL 灵活服务器的详细信息,请参阅 Azure Database for MySQL 单一服务器发生了什么情况?

本文说明了如何使用重定向模式将应用程序连接到 Azure Database for MySQL 服务器。 通过允许应用程序直接连接到后端服务器节点,重定向可以减少客户端应用程序和 MySQL 服务器之间的网络延迟。

准备阶段

登录 Azure 门户。 使用引擎版本 5.6、5.7 或 8.0 创建 Azure Database for MySQL 服务器。

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

重要

Azure Database for MySQL 的专用链接当前不支持重定向。

启动重定向

在 Azure Database for MySQL 服务器中,将 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 处于打开状态,但连接字符串中未设置 SSL 选项。只有使用 SSL 才能进行重定向。”
- 如果在驱动程序端使用了 SSL,但服务器不支持重定向,则将中止第一个连接并返回以下错误:“已中止连接,因为 MySQL 服务器上未启用重定向,或网络包不符合重定向协议。”
- 如果 MySQL 服务器支持重定向,但重定向的连接出于任何原因而失败,则还会中止第一个代理连接。 返回重定向连接错误。
preferred2
(默认值)
- mysqlnd_azure 将尽可能使用重定向。
- 如果连接未在驱动程序端使用 SSL,则服务器不支持重定向,或重定向的连接由于任何非致命原因而无法连接,而代理连接仍然有效,则服务器将回退到第一个代理连接。

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

先决条件

  • PHP 版本 7.2.15+ 和 7.3.2+
  • PHP PEAR
  • php-mysql
  • Azure Database for MySQL 服务器
  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.chinacloudapi.cn';
$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();
  }
?>

后续步骤