Ligar à Base 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 de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

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

Antes de começar

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

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

Importante

Atualmente, não há suporte para o redirecionamento com o Private Link for Azure Database for MySQL.

Ativar redirecionamento

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

PHP

Suporte para redirecionamento em aplicações PHP está disponível através da extensão mysqlnd_azure , desenvolvido pela Microsoft.

A extensão mysqlnd_azure está disponível para adicionar a aplicativos PHP através do PECL, e é altamente recomendável instalar e configurar a extensão através do pacote PECL publicado oficialmente.

Importante

O suporte para redirecionamento na extensão PHP mysqlnd_azure está atualmente em visualização.

Lógica de redirecionamento

Importante

A lógica/comportamento de redirecionamento a partir da versão 1.1.0 foi atualizada e recomenda-se o uso da versão 1.1.0+.

O comportamento de redirecionamento é determinado pelo valor de mysqlnd_azure.enableRedirect. A tabela abaixo descreve o comportamento do 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 (age de forma semelhante ao comportamento descrito na tabela abaixo) e on (age como preferred na tabela abaixo).

mysqlnd_azure.enableValor de redirecionamento 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 SSL."
- Se o SSL for usado no lado do driver, mas o redirecionamento não for suportado no servidor, a primeira conexão será abortada e o seguinte erro será retornado: "Conexão abortada 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 suporta redirecionamento, mas a conexão redirecionada falhou por qualquer motivo, também aborte a primeira conexão proxy. Retornar 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 SSL no lado do driver, o servidor não suportar redirecionamento ou a conexão redirecionada não conseguir se conectar por qualquer motivo não fatal enquanto a conexão proxy ainda é válida, ela retornará à primeira conexão proxy.

Para uma conexão bem-sucedida com o Banco de Dados do Azure para servidor único MySQL usando mysqlnd_azure.enableRedirecto , você precisa seguir as etapas obrigatórias de combinar seu certificado raiz de acordo com os requisitos de conformidade. Para mais detalhes, visite o link.

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

Pré-requisitos

  • PHP versões 7.2.15+ e 7.3.2+
  • PERA PHP
  • php-mysql
  • Base de Dados do Azure para servidor MySQL
  1. Instale mysqlnd_azure com PECL. Recomenda-se usar a versão 1.1.0+.

    sudo pecl install mysqlnd_azure
    
  2. Localize o diretório de extensão (extension_dir) executando 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 para .ini arquivos executando o seguinte:

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

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

  7. Dentro do novo arquivo .ini, adicione as seguintes linhas para habilitar o redirecionamento.

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

Confirmar redirecionamento

Você também pode confirmar que o redirecionamento está configurado com o código PHP de exemplo 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 o seu próprio.

<?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óximos passos

  • Para obter mais informações sobre cadeias de conexão, consulte Cadeias de conexão.