Configurar réplicas externas

Nesta página, descrevemos como configurar uma instância do Cloud SQL que é replicada para uma ou mais réplicas externas. Além disso, você verá como rebaixar a instância principal em uma configuração de réplica externa para reverter a configuração.

Para mais informações sobre a configuração da réplica externa, acesse Sobre a replicação a partir de um servidor externo.

Definir a configuração da réplica externa

Antes de começar

Antes de iniciar essa tarefa, você precisa ter uma instância do Cloud SQL e uma instância externa do MySQL que atendam aos requisitos de réplicas externas.

Configurar a instância primária

  1. Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.
  2. Ative o acesso na instância principal do endereço IP da réplica externa.

    Para informações sobre como ativar o acesso ao IP, consulte Como configurar o acesso para conexões IP.

  3. Registre o endereço IP público e o endereço IP de saída público da instância principal para usar posteriormente. Encontre esses valores na página de Visão geral da instância.
  4. Clique no ícone do Cloud Shell () no canto superior direito.
  5. No prompt do Cloud Shell, use o cliente MySQL integrado para se conectar à instância principal:
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
    
       
  6. Insira a senha raiz. O prompt do mysql será exibido.
  7. Crie um usuário especial para replicação e conceda privilégios de replicação:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Se você estiver começando com um novo banco de dados, crie o mesmo banco de dados e as mesmas tabelas nas instâncias principal e de réplica. Exemplo:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
  9. Se você já tiver um banco de dados na instância principal, precisará criar o mesmo na réplica. Para fazer isso, exporte o banco de dados da instância principal para um bucket do Cloud Storage e importe-o para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um arquivo dump SQL no Cloud Storage.

Configurar a réplica externa

Aviso: este procedimento substitui todos os dados hospedados em um banco de dados do MySQL na réplica, incluindo usuários e senhas, pelas configurações e dados da instância principal.
  1. Na máquina que hospeda a réplica, sugira a nova instância externa do MySQL com o arquivo de exportação criado pela instância principal.

    Por exemplo, o comando a seguir carrega um arquivo exportado chamado mydump.sql:

    mysql --user=root --password < mydump.sql
    
  2. Determine o ID do servidor desse par réplica-principal.

    O ID do servidor é um valor numérico (por exemplo, "3") que deve ser exclusivo em toda a configuração da réplica externa. Cada réplica precisa ter um ID do servidor exclusivo.

  3. Adicione as seguintes opções ao arquivo de opções my.cnf da réplica:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Para mais informações sobre opções de replicação do MySQL, consulte Replicação e opções de geração de registros binários.

  4. Reinicie o processo mysqld para fazer com que o arquivo de configuração seja lido.
  5. Em um cliente mysql na réplica, digite o seguinte comando:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Inicie a replicação na réplica:
    START SLAVE;
    
  7. Confirme o status da replicação:

    SHOW SLAVE STATUS\G;
    

    Caso você veja "Espera pelo envio do evento pelo mestre", a replicação está funcionando.

Como rebaixar a instância primária de uma réplica externa

Quando você tem uma instância do Cloud SQL com uma réplica externa, é possível reverter a configuração, o que faz com que estas alterações ocorram:

  • A réplica externa se torna a nova instância principal.
  • A instância do Cloud SQL se torna uma réplica de leitura, sendo replicada a partir do servidor que anteriormente era a réplica externa, agora chamado de servidor do banco de dados de origem.

Para reverter a configuração da réplica externa:

  1. Crie uma instância de representação de origem.

    Esta instância representará o servidor de banco de dados de origem para a réplica do Cloud SQL após a conclusão da operação de rebaixamento.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "SOURCE_REPRESENTATION_NAME",
             "region": "REGION",
             "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Use a região em que você quer que sua réplica do Cloud SQL resida.

  2. Inicie o processo de rebaixamento.

    Como essa chamada de API requer que você forneça informações confidenciais, é necessário usar um arquivo JSON para fornecer seus dados a cURL, em vez de fornecê-los na linha de comando.

    Crie o arquivo de dados:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    Em seguida, chame a API.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    Para mais informações sobre suas opções para SSL/TLS, consulte Opções de SSL/TLS. Para mais informações sobre as propriedades usadas pelo objeto replicaConfiguration, consulte Como replicar a partir de um servidor externo.

  3. Aguarde a réplica externa concluir todas as transações pendentes da instância principal.

    Quando a réplica alcança a principal, o comando SHOW SLAVE STATUS mostra Seconds Behind Master como 0, e o valor Executed_Gtid_Set será idêntico entre a réplica externa e a instância principal do Cloud SQL.

  4. Use o cliente mysql para interromper a replicação na réplica externa:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Aguarde até que a instância do Cloud SQL comece a replicar a partir do servidor externo, que agora é o servidor de banco de dados de origem.

    A execução do comando SHOW SLAVE STATUS na instância do Cloud SQL fornece o status de replicação.

  6. Quando a instância do Cloud SQL estiver sendo replicada do servidor de banco de dados de origem, defina a sinalização read_only no servidor de banco de dados de origem como off e atualize seus aplicativos para apontar para o servidor de banco de dados de origem.

Resolver problemas

Problema Solução de problemas
Mensagem de erro: The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires A instância principal do Cloud SQL tem backups automáticos e registros binários, e a recuperação pontual está ativada. Por isso, ela precisa ter registros suficientes para que a réplica possa acompanhar. No entanto, nesse caso, embora os registros binários existam, a réplica não sabe em qual linha começar a leitura.

Crie um novo arquivo dump usando as configurações de sinalização corretas e configure a réplica externa usando esse arquivo.

  1. Conecte-se ao cliente mysql por uma instância do Compute Engine.
  2. Execute o mysqldump e use as sinalizações --master-data=1 e --flush-privileges.

    Importante: não inclua a sinalização --set-gtid-purged=OFF.

    Saiba mais.

  3. Verifique se o arquivo dump criado contém a linha SET @@GLOBAL.GTID_PURGED='...'.
  4. Faça upload do arquivo dump para um bucket do Cloud Storage e configure a réplica usando o arquivo dump.

A seguir