Conexión a Azure Database for MySQL con redireccionamiento

SE APLICA A: Azure Database for MySQL: Servidor único

Importante

El servidor único de Azure Database for MySQL está en la ruta de retirada. Se recomienda encarecidamente actualizar al servidor flexible de Azure Database for MySQL. Para más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué ocurre con Azure Database for MySQL con servidor único?

En este artículo se explica cómo conectar una aplicación al servidor de Azure Database for MySQL con modo de redireccionamiento. El redireccionamiento reduce la latencia de red entre las aplicaciones cliente y los servidores MySQL al permitir que las aplicaciones se conecten directamente a los nodos del servidor back-end.

Antes de empezar

Inicie sesión en Azure Portal. Cree un servidor de Azure Database for MySQL con la versión de motor 5.6, 5.7 u 8.0.

Para obtener información detallada sobre cómo crear un servidor de Azure Database for MySQL mediante Azure Portal o la CLI de Azure.

Importante

Actualmente no se admite el redireccionamiento con Private Link para Azure Database for MySQL.

Habilitación del redireccionamiento

En el servidor de Azure Database for MySQL, configure el parámetro redirect_enabled en ON para permitir conexiones con el modo de redireccionamiento. Para actualizar este parámetro del servidor, use Azure Portal o la CLI de Azure.

PHP

La compatibilidad con el redireccionamiento en aplicaciones PHP está disponible a través de la extensión mysqlnd_azure, desarrollada por Microsoft.

La extensión mysqlnd_azure está disponible para agregarse a las aplicaciones PHP a través de PECL y se recomienda encarecidamente instalar y configurar la extensión mediante el paquete PECL publicado oficialmente.

Importante

La compatibilidad con el redireccionamiento en la extensión mysqlnd_azure de PHP se encuentra actualmente en versión preliminar.

Lógica de redireccionamiento

Importante

La lógica y el comportamiento del redireccionamiento a partir de la versión 1.1.0 se actualizó y se recomienda utilizar la versión 1.1.0+ .

El comportamiento del redireccionamiento viene determinado por el valor de mysqlnd_azure.enableRedirect. En la tabla siguiente se describe el comportamiento del redireccionamiento según el valor de este parámetro a partir de la versión 1.1.0 + .

Si usa una versión anterior de la extensión mysqlnd_azure (versión 1.0.0-1.0.3), el comportamiento del redireccionamiento viene determinado por el valor de mysqlnd_azure.enabled. Los valores válidos son off (actúa del mismo modo que el comportamiento descrito en la tabla siguiente) y on (actúa como preferred en la tabla siguiente).

Valor de mysqlnd_azure.enableRedirect Comportamiento
off o 0 No se usará el redireccionamiento.
on o 1 - Si la conexión no usa SSL en el lado del controlador, no se realiza ninguna conexión. Se devuelve el siguiente error: "mysqlnd_azure.enableRedirect está activado, pero la opción SSL no está establecida en la cadena de conexión. El redireccionamiento solo es posible con SSL".
- Si se usa SSL en el lado del controlador, pero no se admite el redireccionamiento en el servidor, se anulará la primera conexión y se devolverá el siguiente error: "Conexión anulada porque el redireccionamiento no está habilitado en el servidor MySQL o el paquete de red no cumple el protocolo de redireccionamiento".
- Si el servidor MySQL admite el redireccionamiento, pero se produjo un error en la conexión redirigida por cualquier motivo, se anula también la primera conexión del proxy. Se devuelve el error de la conexión redirigida.
preferred o 2
(valor predeterminado)
- mysqlnd_azure usará el redireccionamiento si es posible.
- Si la conexión no usa SSL en el lado del controlador, el servidor no admite el redireccionamiento o la conexión redirigida no se puede conectar por cualquier motivo no grave mientras la conexión del proxy sigue siendo válida, se revierte a la primera conexión del proxy.

Para una conexión correcta a un servidor único de Azure Database for MySQL, mediante mysqlnd_azure.enableRedirect debe seguir los pasos obligatorios para combinar el certificado raíz según los requisitos de cumplimiento. Para obtener más detalles, visite enlace.

En las secciones siguientes del documento se describe cómo instalar la extensión mysqlnd_azure mediante PECL y cómo establecer el valor de este parámetro.

Requisitos previos

  • Versiones de PHP 7.2.15 y posterior y 7.3.2 y posterior.
  • PHP PEAR
  • php-mysql
  • Servidor de Azure Database for MySQL
  1. Instale mysqlnd_azure con PECL. Se recomienda utilizar la versión 1.1.0+.

    sudo pecl install mysqlnd_azure
    
  2. Para buscar el directorio de la extensión (extension_dir), ejecute lo siguiente:

    php -i | grep "extension_dir"
    
  3. Cambie los directorios a la carpeta devuelta y asegúrese de que mysqlnd_azure.so se encuentra en esta carpeta.

  4. Para buscar la carpeta de los archivos .ini, ejecute lo siguiente:

    php -i | grep "dir for additional .ini files"
    
  5. Cambie los directorios a la carpeta devuelta.

  6. Cree un nuevo archivo .ini para mysqlnd_azure. Asegúrese de que el nombre se encuentre después de mysqnld al ordenarlos alfabéticamente, ya que los módulos se cargan según el orden de los nombres de los archivos ini. Por ejemplo, si el archivo mysqlnd .ini se denomina 10-mysqlnd.ini, asigne al archivo ini mysqlnd el nombre 20-mysqlnd-azure.ini.

  7. En el nuevo archivo .ini, agregue las líneas siguientes para habilitar el redireccionamiento.

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

Confirmación del redireccionamiento

También puede confirmar que el redireccionamiento está configurado con el siguiente código PHP de ejemplo. Cree un archivo PHP denominado mysqlConnect.php y pegue el código siguiente. Reemplace el nombre del servidor, el nombre de usuario y la contraseña por sus propios valores.

<?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();
  }
?>

Pasos siguientes