Come posso migrare l'istanza database di Amazon RDS for MySQL utilizzando un orario di inizio personalizzato?

6 minuti di lettura
0

Desidero eseguire la migrazione di Amazon Relational Database Service (Amazon RDS) per l'istanza database MySQL in un'altra istanza database MySQL utilizzando un'ora di inizio personalizzata. In che modo posso farlo?

Breve descrizione

Per eseguire la migrazione dei dati da Amazon RDS for MySQL a un'altra istanza database MySQL, puoi utilizzare uno dei seguenti metodi:

  • Replica basata su binlog
    Nota: se stai usando la versione di MySQL versione 8.0.17, il motore potrebbe non stampare l'ultima posizione del file binlog e il nome del file durante un ripristino da arresto anomalo. Di conseguenza, non sarai in grado di utilizzare l'approccio di replica binlog per migrare i tuoi dati. Controlla il sito Web MySQL per questo problema noto.
  • AWS DMS

Risoluzione

Replica binlog

Prerequisiti:

  • La replica binlog utilizza i file binlog generati sull'origine per registrare le modifiche in corso. Imposta il parametro binlog_format sul formato di registrazione binario di tua scelta (ROW, STATEMENT o MIXED).
  • Aumenta il parametro delle ore di conservazione binlog a un valore maggiore del valore corrente. In questo modo, i binlog che non sono ancora stati inviati rimangono nell'istanza di Amazon RDS for MySQL di origine.
  • Assicurati che l'istanza Amazon RDS for MySQL sia raggiungibile dall'host di destinazione.

Per migrare i dati da Amazon RDS for MySQL a un'altra istanza database MySQL utilizzando la replica binlog, completa le seguenti operazioni:

1.    Esegui il ripristino point-in-time dall'istanza database di Amazon RDS di origine con un'ora di inizio personalizzata (o un valore point-in-time).

2.    Crea un backup dell'istanza RDS dell ripristino point-in-time.

Ad esempio, puoi utilizzare mysqldump per eseguire questa operazione:

mysqldump -h rdsendpoint -u username -p dbname > backupfile.sql

3.    Controlla il file di log degli errori dell'istanza RDS di ripristino point-in-time e registra il messaggio relativo all'ultimo file binlog e alla posizione applicati. 

Ecco un esempio di messaggio del file di log:

[Note] InnoDB: Last MySQL binlog file position 0 456, file name mysql-bin-changelog.152707

Nota: è necessario accedere al file binlog record e a qualsiasi file binlog successivo per la replica. La replica dall'istanza RDS di origine può essere eseguita solo utilizzando questi file. Il periodo massimo di conservazione binlog in RDS MySQL può essere impostato solo su sette giorni e il valore predefinito è "NULL". (Per ulteriori informazioni, consulta mysql.rds_set_configuration.) Pertanto, conserva questi file binlog nell'istanza di origine per completarli nelle fasi successive.

4.    Configura un utente di replica e concedi i privilegi necessari all'utente sull'istanza di Amazon RDS for MySQL di origine:

mysql> create user repl_user@'%' identified by 'repl_user';
mysql> grant replication slave, replication client on *.* to repl_user@'%';
mysql> show grants for repl_user@'%';

5.    Trasferisci il file di backup sul server on-premise di destinazione accedendo a MySQL-target. Crea un nuovo database e ripristina il database utilizzando dumpfile nella nuova istanza database esterna:

$ mysql -h hostname -u username -p dbname < backupfile.sql

6.    Arresta il motore MySQL di destinazione:

$ service mysqld stop
  1. Modifica i parametri del file my.cnf in modo che punti al tuo ID server univoco e al database che stai tentando di replicare.

Ad esempio:

server_id=2
replicate-do-db=testdb

Se stai replicando più database, puoi utilizzare l'opzione replicate-do-db più volte e specificare tali database su righe separate come questa:

replicate-do-db=<db_name_1>
replicate-do-db=<db_name_2>
replicate-do-db=<db_name_N>

Per ulteriori informazioni sulla creazione di un filtro di replica con il nome del database, consulta replicate-do-db sul sito Web MySQL.

8.    Salva il file e riavvia il motore database MySQL sull'istanza database MySQL di destinazione.

Ad esempio, se utilizzi un sistema Linux, puoi utilizzare la seguente sintassi:

service mysqld restart

9.    Stabilisci una connessione all'istanza database RDS di origine per MySQL.

Ad esempio:

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.152707', master_log_pos= 456;

master_host: l’endpoint dell'istanza Amazon RDS for MySQL di origine.
master_user: il nome dell'utente di replica (creato nella fase 4).
master_password: la password dell'utente di replica.
master_log_file: il nome del file binlog registrato nella fase 3. (Nella fase 3, l'output di esempio indicava "mysql-bin-changelog.152707" come nome del file binlog.)
master_log_pos: la posizione binlog registrata nella fase 3. (Nella fase 3, l'output di esempio indicava "456" come posizione del file binlog.)

  1.     Accedi all'istanza database RDS di destinazione per MySQL e inizia la replica con il seguente comando:
mysql> start slave;

11.  Verifica che la replica sia sincronizzata tra l'istanza database RDS di origine per MySQL e l'istanza DB MySQL di destinazione:

mysql> show slave status\G

AWS DMS

Prima di configurare la replica con AWS Database Migration Service (AWS DMS), controlla le seguenti risorse:

  • Per eseguire un backup dall'istanza ripristinata point-in-time, consulta le fasi da 1 a 5 nella sezione Replica di binlog. Una best practice consiste nel seguire queste fasi poiché l'ora di inizio personalizzata può essere in qualsiasi momento (passato) all'interno del periodo di conservazione del backup. Dopo aver ripristinato il backup dall'istanza database di destinazione, registra il numero di sequenza di log del checkpoint (LSN) generato durante il processo di ripristino del database. È necessario fare riferimento all'LSN per impostare l'ora di inizio dell'acquisizione dei dati di modifica (CDC). Per ottenere l'LSN del checkpoint, consulta il file di log degli errori dell'istanza MySQL RDS ripristinata immediatamente dopo il completamento dell'operazione di ripristino point-in-time. Ad esempio:
[Note] InnoDB: Log scan progressed past the checkpoint lsn 44326835524