Como posso criptografar uma instância de banco de dados não criptografada do Amazon RDS para MySQL ou MariaDB com o mínimo de tempo de inatividade?
Tentei criar uma réplica de leitura criptografada da minha instância não criptografada do Amazon Relational Database Service (Amazon RDS) para MySQL ou MariaDB. No entanto, recebi um erro.
Breve descrição
O Amazon RDS tem as seguintes limitações para instâncias de banco de dados criptografadas:
- Você não pode modificar uma instância de banco de dados não criptografada existente do Amazon RDS para criptografar a instância.
- Você não pode criar uma réplica de leitura criptografada a partir de uma instância não criptografada.
Como você não pode criptografar uma instância existente do Amazon RDS, você deve criar uma nova instância criptografada. Caso contrário, ao criar uma réplica de leitura criptografada de uma instância não criptografada do Amazon RDS para MySQL, você receberá o seguinte erro:
"You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)"
Para criptografar uma instância de banco de dados não criptografada com tempo de inatividade mínimo, conclua as seguintes etapas:
- Criptografe um snapshot não criptografado obtido de uma réplica de leitura não criptografada da instância de banco de dados.
- Restaure uma nova instância de banco de dados a partir do snapshot criptografado para implantar uma nova instância de banco de dados criptografada.
- Use a replicação do MySQL para sincronizar as alterações da origem para a nova instância de banco de dados criptografada.
- Verifique se a nova instância de banco de dados criptografada está sincronizada com a instância de banco de dados de origem.
- Troque suas conexões e redirecionar seu tráfego para a nova instância de banco de dados.
Resolução
Criptografar um snapshot não criptografado
Para criptografar um snapshot não criptografado obtido de uma réplica de leitura não criptografada, conclua as etapas a seguir:
-
Crie uma réplica de leitura temporária para a instância de banco de dados do Amazon RDS não criptografada de origem. Neste exemplo, a instância de banco de dados não criptografada de origem é chamada de SOURCE-EU e a réplica de leitura temporária é chamada de TEMP-RR.
-
Conecte-se a TEMP-RR e monitore o atraso da réplica até que Seconds_Behind_Master esteja estável no valor 0. O valor estável indica que TEMP-RR está sincronizado com SOURCE-EU.
mysql> SHOW SLAVE STATUS \G Seconds_Behind_Master: 0
-
Interrompa o processo de replicação em TEMP-RR:
MySQL > call mysql.rds_stop_replication; +---------------------------+ | Message | +---------------------------+ | Slave is down or disabled | +---------------------------+
-
Anote os valores de Relay_Master_Log_File e Exec_Master_Log_Pos referentes a TEMP-RR:
mysql> SHOW SLAVE STATUS \G Relay_Master_Log_File: mysql-bin-changelog.000012 Exec_Master_Log_Pos: 123
-
Em SOURCE-EU, defina o parâmetro binlog retention hours para preservar os logs binários pelo tempo necessário para concluir a operação. No exemplo a seguir, as horas de retenção do log binário estão definidas como 24 horas:
mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
-
Capture um snapshot deTEMP-RR. Opcionalmente, exclua TEMP-RR depois de obter o snapshot.
-
Copie o snapshot de TEMP-RR e defina Habilitar criptografia como Sim.
Restaurar uma nova instância de banco de dados do snapshot criptografado
Para restaurar uma nova instância de banco de dados a partir do snapshot criptografado, execute as seguintes etapas:
- Restaure uma nova instância de banco de dados do snapshot copiado com a criptografia ativada. Neste exemplo, a nova instância de banco de dados criptografada é chamada de NEW-RR-EN.
- Modifique as regras de entrada no grupo de segurança SOURCE-EU para permitir o tráfego a partir de NEW-RR-EN. Se você usar o mesmo grupo de segurança nas duas instâncias de banco de dados, poderá usar a mesma referência de ID do grupo de segurança que SOURCE-EU.
Observação: permita o tráfego de saída oara SOURCE-EU a partir de NEW-RR-EN.
Sincronizar as alterações da instância de origem para a nova instância criptografada
Para usar a replicação MySQL para sincronizar alterações da origem para a nova instância de banco de dados criptografada, conclua as seguintes etapas:
- Faça o login em SOURCE-EU.
- Configure um usuário de replicação e conceda as permissões necessárias a esse usuário:
Observação: substitua repl_user pelo seu nome de usuário de replicação e password123 pela sua senha.mysql> create user 'repl_user'@'%' identified by 'password123'; mysql> grant replication slave, replication client on *.* to 'repl_user'@'%'; mysql> show grants for 'repl_user'@'%';
- Conecte-se a NEW-RR-EN e estabeleça uma conexão de replicação com SOURCE-EU:
Observação: substitua rds-endpoint pelo Endpoint da instância de banco de dados de SOURCE-EU. Substitua repl_user e password123 pelo nome de usuário e senha que você criou. Use os valores Relay_Master_Log_File and Exec_Master_Log_Pos para configurar a replicação com o procedimento mysql.rds_set_external_master. Se SOURCE-EU for acessível publicamente e NEW-RR-EN estiver definido como "privado", use o endereço IP privado de SOURCE-EU em vez de rds-endpoint.mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );
- Em NEW-RR-EN, inicie a replicação:
mysql > CALL mysql.rds_start_replication;
Verificar se a instância criptografada está sincronizada com a instância de origem
Para verificar se a nova instância de banco de dados criptografada está sincronizada com a instância de banco de dados de origem, conclua as seguintes etapas:
-
Em NEW-RR-EN, confirme se a replicação obteve êxito e está sincronizada entre SOURCE-EU e NEW-RR-EN:
mysql> SHOW SLAVE STATUS \G
Se a conexão entre a instância de banco de dados de origem e a réplica de leitura for bem-sucedida, a saída será semelhante a esta:
Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
-
Depois que Seconds_Behind_Master estiver estável no valor 0, interrompa o tráfego e feche as conexões em SOURCE-EU.
Observação: interrompa todos os servidores e clientes de aplicativos que se conectam a SOURCE-EU para garantir que nenhuma nova alteração seja feita em SOURCE-EU. Opcionalmente, você pode bloquear temporariamente o grupo de segurança usado por SOURCE-EU. Você deve impedir o tráfego de entrada de qualquer aplicação ou cliente, exceto de NEW-RR-EN e o host a partir do qual o usuário executa essas ações.
Trocar suas conexões e redirecionar seu tráfego para a nova instância de banco de dados
Para alternar suas conexões e redirecionar o tráfego à nova instância de banco de dados, conclua as seguintes etapas:
-
Como usuário líder do banco de dados, conecte-se a NEW-RR-EN e depois interrompa a replicação:
MySQL > call mysql.rds_stop_replication;
Importante: depois de executar esse comando, NEW-RR-EN não replicará mais os dados de SOURCE-EU.
-
Para promover NEW-RR-EN para um servidor independente, interrompa o relacionamento de replicação entre SOURCE-EU e NEW-RR-EN:
MySQL > call mysql.rds_reset_external_master;
-
Para apontar todas as aplicações, clientes e conexões de banco de dados para NEW-RR-EN, especifique o endpoint de DNS NEW-RR-EN em todas as strings de conexão. Ou renomeie SOURCE-EU e modifique NEW-RR-EN para usar o mesmo nome usado por SOURCE-EU.
-
Confirme se as regras do grupo de segurança em NEW-RR-EN permitem tráfego de entrada das aplicações e clientes apropriados.
-
Exclua SOURCE-EU.
Observação: antes de aplicar essa operação em um ambiente de produção, é uma prática recomendada testar esta operação em uma instância de teste
Informações relacionadas
Trabalhar com réplicas de leitura de instância de banco de dados
Como criptografar snapshots do Amazon RDS usando uma chave do KMS?
Troubleshooting replication, no site do MySQL
Configurar a replicação da posição do arquivo de log binário com uma instância de origem externa
Conteúdo relevante
- feita há 9 diaslg...
- feita há 9 diaslg...
- Resposta aceitafeita há 7 diaslg...
- feita há 23 diaslg...
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano