Compartilhar via


Conectar-se ao Banco de Dados do Azure para MySQL com redirecionamento

APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor Único

Importante

O servidor único do Banco de Dados do Azure para MySQL está no caminho da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para MySQL?

Este artigo explica como conectar um aplicativo ao servidor do Banco de Dados do Azure para MySQL com o modo de redirecionamento. O redirecionamento reduz a latência de rede entre os aplicativos cliente e os servidores MySQL, permitindo que os aplicativos se conectem diretamente aos nós do servidor back-end.

Antes de começar

Entre no portal do Azure. Crie um servidor do Banco de Dados do Azure para MySQL com a versão do mecanismo 5.6, 5.7 ou 8.0.

Para obter detalhes, consulte como criar um servidor de Banco de Dados do Azure para MySQL usando o portal do Azure ou a CLI do Azure.

Importante

Atualmente, não há suporte para o redirecionamento com o Link privado para Banco de Dados do Azure para MySQL.

Habilitar redirecionamento

No servidor de Banco de Dados do Azure para MySQL, configure o parâmetro redirect_enabled como ON para permitir conexões com o modo de redirecionamento. Para atualizar esse parâmetro de servidor, use o portal do Azure ou CLI do Azure.

PHP

O suporte para redirecionamento nos aplicativos PHP está disponível por meio da extensão mysqlnd_azure, desenvolvida pela Microsoft.

A extensão mysqlnd_azure está disponível para ser adicionada aos aplicativos PHP por meio do PECL, e é altamente recomendável instalar e configurar a extensão por meio do pacote de PECL publicado oficialmente.

Importante

No momento, o suporte para redirecionamento na extensão mysqlnd_azure do PHP está na versão prévia.

Lógica de redirecionamento

Importante

A lógica/comportamento de redirecionamento a partir da versão 1.1.0 foi atualizada e é recomendável usar a versão 1.1.0 + .

O comportamento de redirecionamento é determinado pelo valor de mysqlnd_azure.enableRedirect. A tabela a seguir descreve o comportamento de redirecionamento com base no valor desse parâmetro a partir da versão 1.1.0+ .

Se você estiver usando uma versão mais antiga da extensão mysqlnd_azure (versão 1.0.0-1.0.3), o comportamento de redirecionamento será determinado pelo valor de mysqlnd_azure.enabled. Os valores válidos são off (atua da mesma forma que o comportamento descrito na tabela abaixo) e on (atua como preferred na tabela abaixo).

mysqlnd_azure.enableRedirect value Comportamento
off ou 0 O redirecionamento não será usado.
on ou 1 - Se a conexão não usar SSL no lado do driver, nenhuma conexão será feita. O seguinte erro é retornado: "mysqlnd_azure.enableRedirect está ativado, mas a opção SSL não está definida na cadeia de conexão. O redirecionamento só é possível com o SSL."
- Se o SSL for usado no lado do driver, mas não houver suporte para o redirecionamento no servidor, a primeira conexão será anulada e o erro a seguir será retornado: "A conexão foi anulada porque o redirecionamento não está habilitado no servidor MySQL ou o pacote de rede não atende ao protocolo de redirecionamento."
- Se o servidor MySQL oferecer suporte ao redirecionamento, mas a conexão redirecionada falhar por algum motivo, a primeira conexão de proxy também será anulada. Retorne o erro da conexão redirecionada.
preferred ou 2
(valor padrão)
- mysqlnd_azure usará o redirecionamento, se possível.
- Se a conexão não usar o SSL no lado do driver, o servidor não oferecer suporte ao redirecionamento ou a conexão redirecionada falhar ao se conectar por qualquer motivo não fatal, enquanto a conexão proxy ainda for válida, ela retornará à primeira conexão de proxy.

Para uma conexão bem-sucedida com o servidor único do Banco de Dados do Azure para MySQL usando mysqlnd_azure.enableRedirect, você precisará seguir as etapas obrigatórias de combinação do certificado raiz de acordo com os requisitos de conformidade. Para mais detalhes, acesse o link.

As seções subsequentes do documento descrevem como instalar a extensão mysqlnd_azure usando o PECL e definir o valor desse parâmetro.

Pré-requisitos

  • PHP versões 7.2.15+ e 7.3.2+
  • PHP PEAR
  • php-mysql
  • Servidor do Banco de Dados do Azure para MySQL
  1. Instale mysqlnd_azure com PECL. É recomendável usar a versão 1.1.0+.

    sudo pecl install mysqlnd_azure
    
  2. Localize o diretório da extensão (extension_dir), fazendo o seguinte:

    php -i | grep "extension_dir"
    
  3. Altere os diretórios para a pasta retornada e verifique se mysqlnd_azure.so está localizado nessa pasta.

  4. Localize a pasta de arquivos .ini, fazendo o seguinte:

    php -i | grep "dir for additional .ini files"
    
  5. Altere os diretórios para essa pasta retornada.

  6. Crie um novo arquivo .ini para mysqlnd_azure. Verifique se a ordem alfabética do nome é posterior à do mysqnld, pois os módulos são carregados de acordo com a ordem dos nomes dos arquivos ini. Por exemplo, se o .ini mysqlnd for nomeado como 10-mysqlnd.ini, nomeie o mysqlnd ini como 20-mysqlnd-azure.ini.

  7. No novo arquivo .ini, adicione as linhas a seguir para habilitar o redirecionamento.

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

Confirme o redirecionamento

Você também pode confirmar se o redirecionamento está configurado com o exemplo de código PHP abaixo. Crie um arquivo PHP chamado mysqlConnect.php e cole o código abaixo. Atualize o nome do servidor, o nome de usuário e a senha com seus próprios dados.

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

Próximas etapas