AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
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 de banco de dados não criptografada do Amazon Relational Database Service (Amazon RDS) para MySQL ou MariaDB. No entanto, recebi uma mensagem de erro.
Breve descrição
O Amazon RDS tem as seguintes limitações para instâncias de banco de dados criptografadas:
- Não é possível modificar uma instância de banco de dados não criptografada existente do Amazon RDS para criptografar a instância.
- Não é possível criar uma réplica de leitura criptografada a partir de uma instância não criptografada.
Como não é possível criptografar uma instância de banco de dados 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á a seguinte mensagem de 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 redirecione seu tráfego para a nova instância de banco de dados.
Resolução
Criptografe 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 da instância de banco de dados não criptografada de origem do Amazon RDS. Neste exemplo, a instância de banco de dados não criptografada de origem é SOURCE-EU e a réplica de leitura temporária é TEMP-RR.
-
Conecte-se ao TEMP-RR. Em seguida, execute o seguinte comando para monitorar o atraso da réplica até que Seconds_Behind_Master fique estável no valor 0:
mysql> SHOW SLAVE STATUS \G Seconds_Behind_Master: 0Observação: um valor estável mostra que TEMP-RR está sincronizado com SOURCE-EU.
-
Execute o comando a seguir para interromper o processo de replicação em TEMP-RR:
MySQL > call mysql.rds_stop_replication; +---------------------------+ | Message | +---------------------------+ | Slave is down or disabled | +---------------------------+ -
Observe os valores de Relay_Master_Log_File e Exec_Master_Log_Pos de TEMP-RR, conforme mostrado no exemplo a seguir:
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, binlog retention hours está definido como 24 horas:
mysql> call mysql.rds_set_configuration('binlog retention hours', 24); -
Capture um snapshot de TEMP-RR. Opcionalmente, exclua TEMP-RR depois de obter o snapshot.
-
Copie o snapshot de TEMP-RR e defina Habilitar criptografia como Sim.
Restaure uma nova instância de banco de dados do snapshot criptografado
Restaure uma nova instância de banco de dados a partir do snapshot copiado e ative a criptografia. Neste exemplo, a nova instância de banco de dados criptografada é 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, é possível usar a mesma referência de ID do grupo de segurança que SOURCE-EU.
Observação: permita o tráfego de saída para SOURCE-EU a partir de NEW-RR-EN.
Sincronize 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 login em SOURCE-EU.
- Execute os comandos a seguir para configurar um usuário de replicação e conceder as permissões necessárias ao 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'@'%'; - Execute o comando a seguir para conectar-se a NEW-RR-EN e estabelecer 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 estiver 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, execute o seguinte comando para iniciar 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, execute o seguinte comando para confirmar se a replicação foi bem-sucedida e está sincronizada entre SOURCE-EU e NEW-RR-EN:
mysql> SHOW SLAVE STATUS \GSe 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 aplicação que se conectam a SOURCE-EU para garantir que nenhuma nova alteração seja feita em SOURCE-EU. Opcionalmente, é possível bloquear de forma temporária 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 realiza essas ações.
Troque suas conexões e redirecione seu tráfego para a nova instância de banco de dados
Para trocar suas conexões e redirecionar seu 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 execute o seguinte comando para interromper a replicação:
MySQL > call mysql.rds_stop_replication;Observação: 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, execute o seguinte comando para interromper 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
Troubleshooting replication (Solução de problemas de replicação) no site do MySQL
Configurar a replicação da posição do arquivo de log binário com uma instância de origem externa
- Tópicos
- Database
- Idioma
- Português

Conteúdo relevante
feita há um ano
feita há um ano
feita há um ano