使用重定向连接到 Azure Database for MariaDB
重要
Azure Database for MariaDB 已列入停用计划。 强烈建议迁移到 Azure Database for MySQL。 有关迁移到 Azure Database for MySQL 的详细信息,请参阅 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 值 | 行为 |
---|---|
off 或 0 |
不使用重定向。 |
on 或 1 |
- 如果连接未在驱动程序端使用 SSL,则不会建立连接。 返回以下错误:“mysqlnd_azure.enableRedirect 已打开,但连接字符串中未设置 SSL 选项。重定向仅适用于 SSL。” - 如果在驱动程序端使用 SSL,但在服务器上不支持重定向,则会中止第一个连接。 返回以下错误:“由于 MariaDB 服务器上未启用重定向或者网络数据包不符合重定向协议,连接已中止。” - 如果 MariaDB 服务器支持重定向,但重定向的连接出于任何原因而失败,则还会中止第一个代理连接。 返回重定向连接错误。 |
preferred 或 2 (默认值) |
- mysqlnd_azure 尽可能使用重定向。 - 如果连接未在驱动程序端使用 SSL,则服务器不支持重定向,或重定向的连接由于任何非致命原因而无法连接,而代理连接仍然有效,则服务器将回退到第一个代理连接。 |
本文档的后续部分将概述如何使用 PECL 安装 mysqlnd_azure
扩展以及如何设置此参数的值。
先决条件
- PHP 版本 7.2.15+ 和 7.3.2+
- PHP PEAR
- php-mysql
- Azure Database for MariaDB 服务器
通过 PECL 安装 mysqlnd_azure。 建议使用版本 1.1.0+。
sudo pecl install mysqlnd_azure
运行以下命令找到扩展目录 (
extension_dir
):sudo php -i | grep "extension_dir"
将目录更改为返回的文件夹,并确保
mysqlnd_azure.so
位于此文件夹中。运行以下命令找到 .ini 文件所在的文件夹:
sudo hp -i | grep "dir for additional .ini files"
将目录更改为此返回的文件夹。
为
mysqlnd_azure
创建新的.ini
文件。 确保名称的字母顺序在mysqnld
的字母顺序之后,因为模块是根据 ini 文件的名称顺序加载的。 例如,如果mysqlnd
.ini 命名为10-mysqlnd.ini
,请将 mysqlnd ini 命名为20-mysqlnd-azure.ini
。在新的
.ini
文件中,添加以下行以启用重定向。extension=mysqlnd_azure mysqlnd_azure.enableRedirect = on/off/preferred
确认重定向
还可以使用以下示例 PHP 代码来确认是否已配置重定向。 创建名为 mysqlConnect.php
的 PHP 文件并粘贴以下代码。 使用你自己的值更新服务器名称、用户名和密码。
<?php
$host = '<yourservername>.mariadb.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 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 differs from the hostname you used used to connect
$res = $db->query('SHOW TABLES;'); //test query with the connection
print_r ($res);
$db->close();
}
?>
后续步骤
有关连接字符串的详细信息,请参阅连接字符串。