Поделиться через


Подключение с перенаправлением к Базе данных Azure для MySQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Внимание

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

В этой статье объясняется, как подключить приложение к серверу База данных Azure для MySQL с режимом перенаправления. Перенаправление уменьшает задержку сети между клиентскими приложениями и серверами MySQL, позволяя приложениям подключаться непосредственно к узлам внутреннего сервера.

Подготовка к работе

Войдите на портал Azure. Создайте сервер Базы данных Azure для MySQL с версией ядра 5.6, 5.7 или 8.0.

Дополнительные сведения см. в руководствах по созданию сервера Базы данных Azure для MySQL с помощью портала Azure или Azure CLI.

Внимание

Перенаправление сейчас не поддерживается с использованием Приватного канала для Базы данных Azure для MySQL.

Включение перенаправления

На сервере Базы данных Azure для MySQL настройте для параметра redirect_enabled значение ON, чтобы разрешить подключения в режиме перенаправления. Чтобы обновить этот параметр сервера, используйте портал Azure или Azure CLI.

PHP

Поддержка перенаправления в приложениях PHP доступна через расширение mysqlnd_azure, разработанное корпорацией Майкрософт.

Расширение mysqlnd_azure доступно для добавления в приложения PHP через PECL, и настоятельно рекомендуется установить и настроить расширение с помощью официально опубликованного пакета 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 используется на стороне драйвера, но перенаправление не поддерживается на сервере, первое подключение прервано, и возвращается следующая ошибка: "Подключение прервано, так как перенаправление не включено на сервере MySQL или сетевом пакете не соответствует протоколу перенаправления".
— Если сервер MySQL поддерживает перенаправление, но в при перенаправлении подключения происходит сбой, первое прокси-подключение также прерывается. При этом возвращается ошибка о перенаправленном подключении.
preferred или 2
(значение по умолчанию)
– mysqlnd_azure будет использовать перенаправление, если возможно.
— Если подключение не использует SSL на стороне драйвера, сервер не поддерживает перенаправление, или перенаправленное подключение не удается подключиться по какой-либо нефатичной причине, пока прокси-подключение по-прежнему является допустимым, он возвращается к первому прокси-подключению.

Для успешного подключения к База данных Azure для MySQL на одном сервере mysqlnd_azure.enableRedirectнеобходимо выполнить обязательные действия по объединению корневого сертификата в соответствии с требованиями соответствия. Дополнительные сведения см . по ссылке.

В последующих разделах документа описано, как установить mysqlnd_azure расширение с помощью PECL и задать значение этого параметра.

Необходимые условия

  • Версия PHP 7.2.15 и выше или 7.3.2 и выше
  • PHP PEAR
  • php-mysql
  • База данных Azure для сервера MySQL
  1. Установите mysqlnd_azure с помощью PECL. Рекомендуется использовать версию 1.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. Создайте новый INI-файл для mysqlnd_azure. Убедитесь, что имя этого файла в отсортированном по алфавиту списке располагается следом за файлом для mysqnld, так как модули загружаются в порядке имен INI-файлов. Например, если INI-файл для mysqlnd имеет имя 10-mysqlnd.ini, переименуйте mysqlnd ini в 20-mysqlnd-azure.ini.

  7. В новый INI-файл добавьте следующие строки, чтобы включить перенаправление.

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

Проверка перенаправления

Проверить правильность настройки перенаправления можно с помощью приведенного ниже примера кода PHP. Создайте PHP-файл с именем mysqlConnect.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();
  }
?>

Следующие шаги

  • Дополнительные сведения о строках подключения см. в этой статье.