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.
¿Cómo puedo cifrar una instancia de base de datos sin cifrar de Amazon RDS para MySQL o MariaDB con un tiempo de inactividad mínimo?
He intentado crear una réplica de lectura cifrada de mi instancia sin cifrar de Amazon Relational Database Service (Amazon RDS) para MySQL o MariaDB. Sin embargo, he recibido un error.
Descripción corta
Amazon RDS tiene las siguientes limitaciones para instancias de base de datos cifradas:
- No puedes modificar una instancia de base de datos sin cifrar de Amazon RDS existente para cifrarla.
- No puedes crear una réplica de lectura cifrada a partir de una instancia sin cifrar.
Como no puedes cifrar una instancia de base de datos de RDS existente, debes crear una nueva instancia cifrada. De lo contrario, al crear una réplica de lectura cifrada de una instancia sin cifrar de Amazon RDS para MySQL, recibirás el siguiente error:
"You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)"
Para cifrar una instancia de base de datos sin cifrar con un tiempo de inactividad mínimo, completa los siguientes pasos:
- Cifra una instantánea sin cifrar que hayas tomado de una réplica de lectura sin cifrar de la instancia de base de datos.
- Restaura una nueva instancia de base de datos a partir de la instantánea cifrada para desplegar una nueva instancia de base de datos cifrada.
- Utiliza la replicación de MySQL para sincronizar los cambios del origen con la nueva instancia de base de datos cifrada.
- Comprueba que la nueva instancia de base de datos cifrada esté sincronizada con la instancia de base de datos de origen.
- Cambia tus conexiones y, posteriormente, redirige el tráfico a la nueva instancia de base de datos.
Resolución
Cifrar una instantánea sin cifrar
Para cifrar una instantánea sin cifrar que hayas tomado de una réplica de lectura sin cifrar, completa los siguientes pasos:
-
Crea una réplica de lectura temporal para la instancia de base de datos de origen sin cifrar de RDS. En este ejemplo, la instancia de base de datos sin cifrar de origen es SOURCE-EU y la réplica de lectura temporal es TEMP-RR.
-
Conéctate a TEMP-RR. A continuación, ejecuta el siguiente comando para supervisar el retraso de la réplica hasta que Seconds_Behind_Master se estabilice en el valor 0:
mysql> SHOW SLAVE STATUS \G Seconds_Behind_Master: 0Nota: Un valor estable indica que TEMP-RR está sincronizado con SOURCE-EU.
-
Ejecuta el siguiente comando para detener el proceso de replicación en TEMP-RR:
MySQL > call mysql.rds_stop_replication; +---------------------------+ | Message | +---------------------------+ | Slave is down or disabled | +---------------------------+ -
Ten en cuenta los valores de Relay_Master_Log_File y Exec_Master_Log_Pos de TEMP-RR, como se muestra en el siguiente ejemplo:
mysql> SHOW SLAVE STATUS \G Relay_Master_Log_File: mysql-bin-changelog.000012 Exec_Master_Log_Pos: 123 -
En SOURCE-EU, define el parámetro de horas de retención de binlog para conservar los registros binarios durante el tiempo necesario para completar la operación. En el siguiente ejemplo, las horas de retención de binlog están establecidas en 24 horas:
mysql> call mysql.rds_set_configuration('binlog retention hours', 24); -
Toma una instantánea de TEMP-RR. Si lo deseas, puedes eliminar TEMP-RR después de tomar la instantánea.
-
Copia la instantánea de TEMP-RR y, posteriormente, establece Habilitar cifrado en Sí.
Restaurar una nueva instancia de base de datos a partir de la instantánea cifrada
Restaura una nueva instancia de base de datos a partir de la instantánea copiada y activa el cifrado. En este ejemplo, la nueva instancia de base de datos cifrada es NEW-RR-EN.
Modifica las reglas de entrada en el grupo de seguridad SOURCE-EU para permitir el tráfico desde NEW-RR-EN. Si usas el mismo grupo de seguridad en ambas instancias de base de datos, puedes usar la misma referencia de ID de grupo de seguridad que SOURCE-EU.
Nota: Permite el tráfico saliente a SOURCE-EU desde NEW-RR-EN.
Sincronizar los cambios del origen con la instancia de origen con la nueva base de datos cifrada
Para utilizar la replicación de MySQL para sincronizar los cambios del origen con la nueva instancia de base de datos cifrada, completa los siguientes pasos:
- Inicia sesión en SOURCE-EU.
- Ejecuta el siguiente comando para configurar un usuario de replicación y concederle los permisos necesarios:
Nota: Sustituye repl_user por tu nombre de usuario de replicación y password123 por tu contraseña.mysql> create user 'repl_user'@'%' identified by 'password123'; mysql> grant replication slave, replication client on *.* to 'repl_user'@'%'; mysql> show grants for 'repl_user'@'%'; - Ejecuta el siguiente comando para conectarte a NEW-RR-EN y establecer una conexión de replicación a SOURCE-EU:
Nota: Sustituye rds-endpoint por el punto de enlace de instancia de la base de datos para SOURCE-EU. Sustituye repl_user y password123 por el nombre de usuario y contraseña que creaste. Utiliza los valores Relay_Master_Log_File y Exec_Master_Log_Pos para configurar la replicación con el procedimiento mysql.rds_set_external_master. Si SOURCE-EU es de acceso público y NEW-RR-EN está configurada como privada, utiliza la dirección IP privada de SOURCE-EU en lugar de rds-endpoint.mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 ); - Desde NEW-RR-EN, ejecuta el siguiente comando para iniciar la replicación:
mysql > CALL mysql.rds_start_replication;
Comprobar que la instancia cifrada esté sincronizada con la instancia de origen
Para comprobar que la nueva instancia de base de datos cifrada esté sincronizada con la instancia de base de datos de origen, completa los siguientes pasos:
-
Desde NEW-RR-EN, ejecuta el siguiente comando para confirmar que la replicación se ha realizado correctamente y está sincronizada entre SOURCE-EU y NEW-RR-EN:
mysql> SHOW SLAVE STATUS \GSi la conexión entre la instancia de base de datos de origen y la réplica de lectura es correcta, el resultado será parecido a lo siguiente:
Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0 -
En cuanto Seconds_Behind_Master esté estable en el valor 0, detén el tráfico y cierra las conexiones en SOURCE-EU.
Nota: Detén todos los servidores de aplicaciones y los clientes que se conectan a SOURCE-EU para asegurarte de que no se hagan nuevos cambios en SOURCE-EU. Si lo deseas, puedes bloquear temporalmente el grupo de seguridad que utiliza SOURCE-EU. Debes evitar que el tráfico entrante desde cualquier aplicación o cliente, excepto desde NEW-RR-EN y el host desde el que el usuario lleva a cabo estas acciones.
Cambiar tus conexiones y redirigir el tráfico a la nueva instancia de base de datos
Para cambiar tus conexiones y redirigir el tráfico a la nueva instancia de base de datos, completa los siguientes pasos:
-
Como usuario líder de la base de datos, conéctate a NEW-RR-EN y, a continuación, ejecuta el siguiente comando para detener la replicación:
MySQL > call mysql.rds_stop_replication;Nota: Tras ejecutar este comando, NEW-RR-EN ya no replica los datos de SOURCE-EU.
-
Para promocionar NEW-RR-EN a un servidor independiente, detén la relación de replicación entre SOURCE-EU y NEW-RR-EN:
MySQL > call mysql.rds_reset_external_master; -
Para dirigir todas las conexiones de aplicaciones, clientes y bases de datos a NEW-RR-EN, especifica el punto de enlace de DNS NEW-RR-EN en todas las cadenas de conexión. O bien, cambia el nombre de SOURCE-EU y, a continuación, modifica NEW-RR-EN para usar el mismo nombre que usa SOURCE-EU.
-
Confirma que las reglas del grupo de seguridad de NEW-RR-EN permiten el tráfico entrante desde las aplicaciones y los clientes adecuados.
-
Elimina SOURCE-EU.
Nota: Se recomienda probar esta operación en una instancia de prueba antes de aplicarla en un entorno de producción.
Información relacionada
Uso de réplicas de lectura de instancias de base de datos
Troubleshooting replication (Solución de problemas de replicación) en el sitio web de MySQL
- Temas
- Database
- Idioma
- Español

Contenido relevante
preguntada hace un año
preguntada hace 2 años