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.
Come posso crittografare un'istanza database Amazon RDS per MySQL o MariaDB non crittografata con tempi di inattività minimi?
Ho provato a creare una replica di lettura crittografata della mia istanza database Amazon Relational Database Service (Amazon RDS) per MySQL o MariaDB non crittografata. Tuttavia, ho ricevuto un errore.
Breve descrizione
Amazon RDS ha le seguenti limitazioni per le istanze database crittografate:
- Non puoi trasformare un'istanza database Amazon RDS non crittografata esistente in un'istanza crittografata.
- Non puoi creare una replica di lettura crittografata da un'istanza non crittografata.
Poiché non puoi crittografare un'istanza database RDS esistente, devi creare una nuova istanza crittografata. Altrimenti, quando crei una replica di lettura crittografata di un'istanza Amazon RDS per MySQL non crittografata, ricevi il seguente errore:
"You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)"
Per crittografare un'istanza database non crittografata con tempi di inattività minimi, completa i seguenti passaggi:
- Crittografa uno snapshot non crittografato ottenuto da una replica di lettura non crittografata dell'istanza database.
- Ripristina una nuova istanza database dallo snapshot crittografato per distribuire una nuova istanza database crittografata.
- Utilizza la replica MySQL per sincronizzare le modifiche dall'origine alla nuova istanza database crittografata.
- Verifica che la nuova istanza database crittografata sia sincronizzata con l'istanza database di origine.
- Cambia le connessioni e reindirizza il traffico verso la nuova istanza database.
Risoluzione
Crittografa uno snapshot non crittografato
Per crittografare uno snapshot non crittografato ottenuto da una replica di lettura non crittografata, completa i seguenti passaggi:
-
Crea una replica di lettura temporanea per l'istanza database RDS non crittografata di origine. In questo esempio, l'istanza database non crittografata di origine è SOURCE-EU e la replica di lettura temporanea è TEMP-RR.
-
Connettiti a TEMP-RR. Quindi esegui questo comando per monitorare il ritardo della replica fino a quando Seconds_Behind_Master non è stabile sul valore 0:
mysql> SHOW SLAVE STATUS \G Seconds_Behind_Master: 0Nota: un valore stabile indica che TEMP-RR è sincronizzato con SOURCE-EU.
-
Esegui questo comando per arrestare il processo di replica in TEMP-RR:
MySQL > call mysql.rds_stop_replication; +---------------------------+ | Message | +---------------------------+ | Slave is down or disabled | +---------------------------+ -
Prendi nota dei valori Relay_Master_Log_File e Exec_Master_Log_Pos di TEMP-RR, come mostra il seguente esempio:
mysql> SHOW SLAVE STATUS \G Relay_Master_Log_File: mysql-bin-changelog.000012 Exec_Master_Log_Pos: 123 -
In SOURCE-EU, imposta il parametro binlog retention hours per conservare i log binari per il tempo necessario per completare l'operazione. Nel seguente esempio, binlog retention hours è impostato su 24 ore:
mysql> call mysql.rds_set_configuration('binlog retention hours', 24); -
Crea uno snapshot di TEMP-RR. Facoltativamente, elimina TEMP-RR dopo aver eseguito lo snapshot.
-
Copia lo snapshot di TEMP-RR e imposta Abilita crittografia su Sì.
Ripristina una nuova istanza database dallo snapshot crittografato
Ripristina una nuova istanza database dallo snapshot copiato e attiva la crittografia. In questo esempio, la nuova istanza database crittografata è NEW-RR-EN.
Modifica le regole in entrata nel gruppo di sicurezza SOURCE-EU per consentire il traffico proveniente da NEW-RR-EN. Se utilizzi lo stesso gruppo di sicurezza in entrambe le istanze database, puoi utilizzare lo stesso riferimento ID del gruppo di sicurezza di SOURCE-EU.
Nota: assicurati di consentire il traffico in uscita verso SOURCE-EU da NEW-RR-EN.
Sincronizza le modifiche dall'istanza di origine alla nuova istanza crittografata
Per utilizzare la replica MySQL per sincronizzare le modifiche dall'origine alla nuova istanza database crittografata, completa i seguenti passaggi:
- Accedi a SOURCE-EU.
- Esegui questo comando per configurare un utente di replica e concedergli le autorizzazioni necessarie:
Nota: sostituisci repl_user con il tuo nome utente di replica e password123 con la tua password.mysql> create user 'repl_user'@'%' identified by 'password123'; mysql> grant replication slave, replication client on *.* to 'repl_user'@'%'; mysql> show grants for 'repl_user'@'%'; - Esegui questo comando per connetterti a NEW-RR-EN e stabilire una connessione di replica a SOURCE-EU:
Nota: sostituisci rds-endpoint con l'endpoint dell'istanza database per SOURCE-EU. Sostituisci repl_user e password123 con il nome utente e la password che hai creato. Utilizza i valori Relay_Master_Log_File e Exec_Master_Log_Pos per configurare la replica con la procedura mysql.rds_set_external_master. Se SOURCE-EU è accessibile pubblicamente e NEW-RR-EN è impostato su privato, utilizza l'indirizzo IP privato di SOURCE-EU anziché quello di rds-endpoint.mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 ); - Da NEW-RR-EN, esegui questo comando per avviare la replica:
mysql > CALL mysql.rds_start_replication;
Verifica che l'istanza crittografata sia sincronizzata con l'istanza di origine
Per verificare che la nuova istanza database crittografata sia sincronizzata con l'istanza database di origine, completa i seguenti passaggi:
-
Da NEW-RR-EN, esegui questo comando per verificare che la replica sia corretta e sincronizzata tra SOURCE-EU e NEW-RR-EN:
mysql> SHOW SLAVE STATUS \GSe la connessione tra l'istanza database di origine e la replica di lettura ha esito positivo, l'output è simile al seguente:
Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0 -
Una volta che Seconds_Behind_Master è stabile sul valore 0, arresta il traffico e chiudi le connessioni in SOURCE-EU.
Nota: arresta tutti i server e i client dell'applicazione che si connettono a SOURCE-EU per assicurarti che non vengano apportate nuove modifiche a SOURCE-EU. Facoltativamente, puoi bloccare temporaneamente il gruppo di sicurezza utilizzato da SOURCE-EU. Devi impedire il traffico in entrata da qualsiasi applicazione o client, ad eccezione di NEW-RR-EN e dell'host da cui l'utente esegue queste azioni.
Cambia le connessioni e reindirizza il traffico verso la nuova istanza database
Per cambiare le connessioni e reindirizzare il traffico verso la nuova istanza database, completa i seguenti passaggi:
-
Come utente leader del database, connettiti a NEW-RR-EN, quindi esegui questo comando per arrestare la replica:
MySQL > call mysql.rds_stop_replication;Nota: dopo aver eseguito questo comando, NEW-RR-EN non replica più i dati di SOURCE-EU.
-
Per promuovere NEW-RR-EN a server autonomo, esegui questo comando per arrestare la relazione di replica tra SOURCE-EU e NEW-RR-EN:
MySQL > call mysql.rds_reset_external_master; -
Per indirizzare tutte le applicazioni, i client e le connessioni al database a NEW-RR-EN, specifica l'endpoint DNS NEW-RR-EN in tutte le stringhe di connessione. In alternativa, rinomina SOURCE-EU e rinomina NEW-RR-EN con lo stesso nome utilizzato da SOURCE-EU.
-
Verifica che le regole del gruppo di sicurezza in NEW-RR-EN consentano il traffico in entrata dalle applicazioni e dai client appropriati.
-
Elimina SOURCE-EU.
Nota: prima di utilizzare questa operazione in un ambiente di produzione, è consigliabile testarla su un'istanza di prova.
Informazioni correlate
Uso delle repliche di lettura dell'istanza database
Come faccio a creare uno snapshot crittografato di un'istanza database Amazon RDS non crittografata?
Troubleshooting replication “Risoluzione dei problemi di replica) sul sito web MySQL
- Argomenti
- Database
- Lingua
- Italiano
