Para mais informações sobre a replicação, consulte o artigo Acerca da replicação no Cloud SQL.
Configure a configuração da réplica externa
Antes de começar
Antes de iniciar esta tarefa, tem de ter uma instância do Cloud SQL e uma instância externa do MySQL que cumpra os requisitos para réplicas externas.
Requisitos da instância de origem
A instância de origem de uma réplica de leitura externa tem de ser uma instância principal ou autónoma. Não pode usar uma réplica de leitura do Cloud SQL como a instância de origem para uma réplica de leitura externa. Por vezes, as réplicas de leitura são recriadas a partir do clone do disco da respetiva instância principal, e o respetivo estado de replicação para uma réplica de leitura externa não pode ser mantido pela réplica de leitura.
Configure a instância principal
- Aceda à página Instâncias do Cloud SQL na Google Cloud consola.
- Ative o acesso na instância principal para o endereço IP da réplica externa.
Para obter informações sobre como ativar o acesso por IP, consulte o artigo Configurar o acesso para ligações IP.
- Registe o endereço IP público e o endereço IP público de saída da instância principal para utilização posterior. Pode encontrar estes valores na página Vista geral da instância.
- Clique no ícone do Cloud Shell
no canto superior direito.
- Na linha de comandos do Cloud Shell, use o cliente MySQL incorporado para se ligar à instância principal:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- Introduza a sua palavra-passe de raiz. Em seguida, deve ver o comando mysql.
- Crie um utilizador especial para a 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'@'%';
- Se estiver a começar com uma nova base de dados, crie a mesma base de dados e tabelas nas instâncias principal e de réplica. Por 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');
- Se já tiver uma base de dados na instância principal, tem de criar a mesma na réplica. Para o fazer, exporte a base de dados da instância principal para um contentor do Cloud Storage e importe-a para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um ficheiro de captura SQL no Cloud Storage.
Configure a réplica externa
Aviso: este procedimento substitui todos os dados alojados numa base de dados MySQL na réplica, incluindo utilizadores e palavras-passe, pelas definições e pelos dados da instância principal.-
Na máquina que aloja a réplica, inicialize a nova instância MySQL externa
com o ficheiro de exportação que criou a partir da instância principal.
Por exemplo, o comando seguinte carrega um ficheiro exportado com o nome
mydump.sql
:mysql --user=root --password < mydump.sql
- Determine o ID do servidor para este par principal-réplica.
O ID do servidor é um valor numérico (por exemplo, "3") que tem de ser exclusivo na configuração da réplica externa (cada réplica tem de ter um ID do servidor exclusivo).
- Adicione as seguintes opções ao ficheiro 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 as opções de replicação do MySQL, consulte o artigo Opções de replicação e registo binário.
- Reinicie o processo
mysqld
para que o ficheiro de configuração seja lido. - Num cliente
mysql
na réplica, introduza o seguinte comando:CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER', MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
- Inicie a replicação na réplica:
START SLAVE;
Confirme o estado da replicação:
SHOW SLAVE STATUS\G;
Se vir "A aguardar que o mestre envie o evento", a replicação está a funcionar.
Rebaixar a instância principal de uma réplica externa
Quando tem uma instância do Cloud SQL com uma réplica externa, pode inverter a configuração, o que faz com que ocorram as seguintes alterações:
- A réplica externa torna-se a nova instância principal.
- A instância do Cloud SQL torna-se uma réplica de leitura, replicando a partir do servidor que era anteriormente a réplica externa (agora denominado servidor de base de dados de origem).
Para reverter a configuração da réplica externa:
-
Crie uma instância de representação de origem.
Esta instância representa o servidor de base 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 onde quer que a réplica do Cloud SQL resida.
Inicie o processo de rebaixamento.
Uma vez que esta chamada API requer que faculte informações confidenciais, deve usar um ficheiro JSON para facultar os seus dados ao cURL, em vez de os facultar na linha de comandos.
Crie o ficheiro 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 as suas opções de SSL/TLS, consulte o artigo Opções de SSL/TLS. Para mais informações sobre as propriedades usadas pelo objeto
replicaConfiguration
, consulte Replicação a partir de um servidor externo.-
Aguarde que a réplica externa conclua todas as transações pendentes da instância principal.
Quando a réplica está atualizada, o comando
SHOW SLAVE STATUS
mostraSeconds Behind Master
como 0 e o valorExecuted_Gtid_Set
é idêntico entre a réplica externa e a instância principal do Cloud SQL. Use o cliente
mysql
para parar a replicação na réplica externa:STOP SLAVE RESET SLAVE ALL
Aguarde que a instância do Cloud SQL comece a replicar a partir do servidor externo, que é agora o servidor de base de dados de origem.
A execução do comando
SHOW SLAVE STATUS
na instância do Cloud SQL fornece o estado da replicação.-
Quando a instância do Cloud SQL estiver a replicar com êxito a partir do servidor de base de dados de origem, defina a flag
read_only
no servidor de base de dados de origem comooff
e atualize as suas aplicações para apontarem para o servidor de base de dados de origem.
Resolver problemas
Problema | Resoluçã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 cópias de segurança automáticas e registos
binários, e a recuperação num determinado momento está ativada, pelo que deve ter registos
suficientes para que a réplica consiga acompanhar. No entanto, neste caso, embora os registos binários existam, a réplica não sabe a partir de que linha deve começar a ler.
Crie um novo ficheiro de despejo com as definições de flags corretas e configure a réplica externa com esse ficheiro
|
O que se segue?
- Saiba como gerir réplicas.
- Saiba mais sobre os requisitos e as práticas recomendadas para a configuração da réplica externa.
- Saiba mais sobre a replicação do MySQL.
- Saiba mais sobre as opções de replicação.
- Saiba como verificar o estado da replicação.
- Saiba mais sobre a replicação a partir de um servidor externo.