Esta página descreve como configurar e usar uma importação gerida para dados quando faz a replicação de um servidor externo para o Cloud SQL.
Tem de concluir todos os passos nesta página. Quando terminar, pode administrar e monitorizar a instância de representação de origem da mesma forma que faria com qualquer outra instância do Cloud SQL.
Antes de começar
Antes de começar, conclua estes passos:
Atualize os privilégios do utilizador de replicação
O utilizador de replicação no servidor externo está configurado para aceitar ligações de qualquer anfitrião (%
). Atualize esta conta de utilizador para que possa ser usada apenas com a réplica do Cloud SQL.
Privilégios necessários
Existem quatro tipos de combinações de migrações e despejos.
- Tipo 1: migração contínua e descarga gerida
- Tipo 2: migração contínua e descarga manual
- Tipo 3: migração única e descarga gerida
- Tipo 4: migração única e descarga manual
Os privilégios para cada tipo de migração e combinação simples estão listados abaixo.
Tipo 1
A conta de utilizador tem de ter os seguintes privilégios:
- REPLICATION SLAVE
- EXECUTE
- SELECIONAR
- MOSTRAR VISTA
- REPLICATION CLIENT
- RECARREGAR
- TRIGGER
- (Apenas para migrar do Amazon RDS e do Amazon Aurora) LOCK TABLES
Para a versão 8.0 e superior do MySQL, recomendamos que ignore o privilégio BACKUP ADMIN
para um desempenho ideal.
Tipo 2
A conta de utilizador tem de ter os seguintes privilégios:
Tipo 3
A conta de utilizador tem de ter os seguintes privilégios:
- SELECIONAR
- MOSTRAR VISTA
- TRIGGER
- (A partir da migração de origens com apenas a definição
GTID_MODE = ON
) RECARREGAR
Para a versão 8.0 e superior do MySQL, recomendamos que ignore o privilégio BACKUP ADMIN
para um desempenho ideal.
Tipo 4
Não são necessários privilégios.
Atualize os privilégios
Para atualizar os privilégios, abra um terminal no servidor externo e introduza os seguintes comandos.
Cliente mysql
Para GTID:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION_CLIENT, RELOAD ON . TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
Para binlog:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD ON . TO 'GCP_USERNAME'@'HOST'; FLUSH PRIVILEGES;
exemplo
UPDATE mysql.user
SET Host='192.0.2.0'
WHERE Host='%'
AND User='replicationUser';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO 'username'@'host.com';
FLUSH PRIVILEGES;
Propriedade | Descrição |
---|---|
NEW_HOST | Especifique o IP de saída da réplica do Cloud SQL. |
OLD_HOST | O valor atual atribuído a Host que quer
alterar. |
USERNAME | A conta de utilizador de replicação no servidor externo. |
GCP_USERNAME | O nome de utilizador da conta de utilizador. |
HOST | O nome do anfitrião da conta de utilizador. |
Valide as definições de replicação
Após a conclusão da configuração, certifique-se de que a réplica do Cloud SQL consegue replicar a partir do servidor externo.
As seguintes definições de sincronização externa têm de estar corretas.
- Conetividade entre a réplica do Cloud SQL e o servidor externo
- Privilégios do utilizador de replicação
- Compatibilidade de versões
- A réplica do Cloud SQL ainda não está a ser replicada
- Os registos binários estão ativados no servidor externo
- O GTID está ativado se estiver a tentar fazer uma sincronização externa a partir de um servidor externo do RDS e estiver a usar um contentor Google Cloud
Para validar estas definições, abra um terminal do Cloud Shell e introduza os seguintes comandos:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings
exemplo
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
exemplo com flags de sincronização
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Estas chamadas devolvem uma lista do tipo sql#externalSyncSettingErrorList
.
Se a lista estiver vazia, não existem erros. Uma resposta sem erros é apresentada da seguinte forma:
{ "kind": "sql#externalSyncSettingErrorList" }
Propriedade | Descrição |
---|---|
SYNC_MODE | Certifique-se de que consegue manter a réplica do Cloud SQL e o servidor externo sincronizados após a configuração da replicação. Os modos de sincronização incluem EXTERNAL_SYNC_MODE_UNSPECIFIED , ONLINE e OFFLINE . |
SYNC_PARALLEL_LEVEL | Verifique a definição que controla a velocidade à qual os dados das tabelas de uma base de dados são transferidos. Estão disponíveis os seguintes valores:
Nota: o valor predefinido deste parâmetro é |
SYNC_FLAGS | Uma lista de flags de sincronização inicial a validar. Recomendado apenas se planear usar flags de sincronização personalizadas ao replicar a partir da origem. Para ver uma lista das flags permitidas, consulte o artigo Flags de sincronização inicial. |
PROJECT_ID | O ID do seu Google Cloud projeto. |
REPLICA_INSTANCE_ID | O ID da sua réplica do Cloud SQL. |
Autorização de bloqueio de leitura global
Se não tiver autorização para aceder ao bloqueio de leitura global no servidor externo, como pode acontecer com o Amazon RDS e o Amazon Aurora, pause as gravações no servidor, conforme descrito nos passos seguintes:
- Aceda ao Logs Explorer e selecione a réplica do Cloud SQL na lista de recursos. É apresentada uma lista dos registos mais recentes da réplica do Cloud SQL. Ignore-as por agora.
- Abra um terminal e introduza os comandos em Iniciar replicação no servidor externo para replicar a partir do servidor externo.
Regresse ao Explorador de registos. Quando vir o registo da seguinte forma, pare de escrever na base de dados no seu servidor externo. Na maioria dos casos, isto só é necessário durante alguns segundos.
DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
Quando vir a seguinte entrada de registo no Explorador de registos, reative a escrita na base de dados no seu servidor externo.
DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
Inicie a replicação no servidor externo
Depois de confirmar que pode fazer a replicação a partir do servidor externo, inicie a replicação. A velocidade de execução da replicação para o processo de importação inicial é de até 500 GB por hora. No entanto, esta velocidade pode variar consoante o nível da máquina, o tamanho do disco de dados, o débito da rede e a natureza da sua base de dados.
Durante o processo de importação inicial, não execute nenhuma operação DDL no servidor externo. Se o fizer, pode causar inconsistências durante a importação. Após a conclusão do processo de importação, a réplica usa os registos binários no servidor externo para alcançar o estado atual do servidor externo.
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync
exemplo
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
exemplo com flags de sincronização
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
"skipVerification": false,
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Propriedade | Descrição |
---|---|
SYNC_MODE | Verifique se consegue manter a réplica do Cloud SQL e o servidor externo sincronizados após a configuração da replicação. |
SKIP_VERIFICATION | Se deve ignorar o passo de validação incorporado antes de sincronizar os seus dados. Este parâmetro só é recomendado se já tiver validado as definições de replicação. |
SYNC_PARALLEL_LEVEL | Fornecer uma definição que controla a velocidade à qual os dados das tabelas de uma base de dados são transferidos. Estão disponíveis os seguintes valores:
Nota: o valor predefinido deste parâmetro é |
SYNC_FLAGS | Uma lista de flags de sincronização inicial a validar. Recomendado apenas se planear usar flags de sincronização personalizadas ao replicar a partir da origem. Para ver uma lista das flags permitidas, consulte o artigo Flags de sincronização inicial. |
PROJECT_ID | O ID do seu Google Cloud projeto. |
REPLICA_INSTANCE_ID | O ID da sua réplica do Cloud SQL. |
Sinalizações de sincronização inicial
Para migrar com flags de base de dados personalizadas, pode usar as seguintes flags permitidas:
- --add-drop-database
- --add-drop-table
- --add-drop-trigger
- --add-locks
- --allow-keywords
- --all-tablespaces
- --apply-slave-statements
- --column-statistics
- --comments
- --compact
- --compatible
- --complete-insert
- --compress
- --compression-algorithms
- --create-options
- --default-character-set
- --delayed-insert
- --disable-keys
- --dump-date
- --events
- --extended-insert
- --fields-enclosed-by
- --fields-escaped-by
- --fields-optionally-enclosed-by
- --fields-terminated-by
- --flush-logs
- --flush-privileges
- --force
- --get-server-public-key
- --hex-blob
- --ignore-error
- --ignore-read-lock-error
- --ignore-table
- --insert-ignore
- --lines-terminated-by
- --lock-all-tables
- --lock-tables
- --max-allowed-packet
- --net-buffer-length
- --network-timeout
- --no-autocommit
- --no-create-db
- --no-create-info
- --no-data
- --no-defaults
- --no-set-names
- --no-tablespaces
- --opt
- --order-by-primary
- --pipe
- --quote-names
- --quick
- --replace
- --routines
- --secure-auth
- --set-charset
- --shared-memory-base-name
- --show-create-skip-secondary-engine
- --skip-opt
- --ssl-cipher
- --ssl-fips-mode
- --ssl-verify-server-cert
- --tls-ciphersuites
- --tls-version
- --triggers
- --tz-utc
- --verbose
- --xml
- --zstd-compression-level
Para ver os valores permitidos, consulte os documentos públicos do MySQL.
Monitorize a migração
Depois de iniciar a replicação a partir do servidor externo, tem de monitorizar a replicação. Para saber mais, consulte o artigo Monitorizar a replicação. Em seguida, pode concluir a migração.
Resolver problemas
Considere as seguintes opções de resolução de problemas:
Problema | Resolução de problemas |
---|---|
A réplica de leitura não começou a ser replicada na criação. | Provavelmente, existe um erro mais específico nos ficheiros de registo. Inspeccione os registos nos Registos na nuvem para encontrar o erro real. |
Não é possível criar uma réplica de leitura: erro invalidFlagValue. | Uma das flags no pedido é inválida. Pode ser uma flag que
forneceu explicitamente ou uma que foi definida para um valor predefinido.
Primeiro, verifique se o valor da flag Se a flag |
Não é possível criar uma réplica de leitura: erro desconhecido. | Provavelmente, existe um erro mais específico nos ficheiros de registo.
Inspeccione os registos nos
Registos na nuvem para encontrar o erro real.
Se o erro for: |
O disco está cheio. | O tamanho do disco da instância principal pode ficar cheio durante a criação da réplica. Edite a instância principal para a atualizar para um tamanho de disco maior. |
A instância da réplica está a usar demasiada memória. | A réplica usa memória temporária para colocar em cache operações de leitura pedidas com frequência, o que pode fazer com que use mais memória do que a instância principal.
Reinicie a instância da réplica para recuperar o espaço de memória temporário. |
A replicação foi interrompida. | O limite máximo de armazenamento foi atingido e o aumento automático do armazenamento não está ativado.
Edite a instância para ativar a autorização |
O atraso de replicação é consistentemente elevado. | A carga de escrita é demasiado elevada para a réplica processar. O atraso de replicação ocorre quando o segmento SQL numa réplica não consegue acompanhar o segmento de E/S. Alguns tipos de consultas ou cargas de trabalho podem causar um atraso de replicação elevado temporário ou permanente para um determinado esquema. Algumas das causas típicas
do atraso na replicação são:
Algumas soluções possíveis incluem:
|
O atraso de replicação aumenta subitamente. | Isto deve-se a transações de longa duração. Quando uma transação
(declaração única ou várias declarações) é confirmada na instância de origem, a
hora de início da transação é registada no registo binário. Quando a réplica recebe este evento binlog, compara essa data/hora com a data/hora atual para calcular o atraso da replicação. Assim, uma transação de longa duração na origem resultaria num grande atraso de replicação imediato na réplica. Se a quantidade de alterações de linhas na transação for grande, a réplica também demoraria muito tempo a executá-la. Durante este período,
o atraso na replicação está a aumentar. Quando a réplica concluir esta transação, o período de sincronização depende da carga de trabalho de gravação na origem e da velocidade de processamento da réplica.
Para evitar uma transação longa, algumas soluções possíveis incluem:
|
A alteração das flags de replicação paralela resulta num erro. | Foi definido um valor incorreto para uma ou mais destas flags.
Na instância principal que está a apresentar a mensagem de erro, defina as flags de replicação paralela:
|
A criação de réplicas falha devido ao limite de tempo. | As transações não comprometidas de longa duração na instância principal podem fazer com que a criação de réplicas de leitura falhe.
Recrie a réplica depois de parar todas as consultas em execução. |
Além disso, para o MySQL, considere também as seguintes opções:
Problema | Resolução de problemas |
---|---|
Lost connection to MySQL server during query when dumping table . |
A origem pode ter ficado indisponível ou o despejo continha pacotes
demasiado grandes.
Certifique-se de que o dispositivo principal externo está disponível para ligação. Também pode modificar os valores das flags net_read_timeout e net_write_timeout na instância de origem para parar o erro. Para mais informações sobre os valores permitidos para estas flags, consulte o artigo Configure flags da base de dados. Para saber mais sobre a utilização de flags |
A migração de dados inicial foi bem-sucedida, mas não está a ser feita a replicação de dados. | Uma possível causa principal pode ser a base de dados de origem ter definido flags de replicação que resultam na não replicação de algumas ou todas as alterações da base de dados.
Certifique-se de que as flags de replicação, como Execute o comando |
A migração de dados inicial foi bem-sucedida, mas a replicação de dados deixa de funcionar após algum tempo. | Opções que pode testar:
|
mysqld check failed: data disk is full . |
O disco de dados da instância da réplica está cheio.
Aumente o tamanho do disco da instância da réplica. Pode aumentar manualmente o tamanho do disco ou ativar o aumento automático do armazenamento. |
Reveja os registos de replicação
Quando valida as definições de replicação, são gerados registos.
Pode ver estes registos através dos seguintes passos:
Aceda ao visualizador de registos na Google Cloud consola.
- Selecione a réplica do Cloud SQL no menu pendente Instância.
- Selecione o ficheiro de registo
replication-setup.log
.
Se a réplica do Cloud SQL não conseguir estabelecer ligação ao servidor externo, confirme o seguinte:
- Qualquer firewall no servidor externo está configurada para permitir ligações a partir do endereço IP de saída da réplica do Cloud SQL.
- A sua configuração SSL/TLS está correta.
- O utilizador, o anfitrião e a palavra-passe da replicação estão corretos.
O que se segue?
- Saiba como atualizar uma instância.
- Saiba como gerir réplicas.
- Saiba mais sobre a monitorização de instâncias.
- Saiba como promover a sua réplica do Cloud SQL.