Importazione di dati da qualsiasi origine in un’istanza database Amazon RDS per MariaDB - Amazon Relational Database Service

Importazione di dati da qualsiasi origine in un’istanza database Amazon RDS per MariaDB

Amazon RDS consente di migrare dati di MariaDB esistenti da qualsiasi origine a un’istanza database RDS per MariaDB. È possibile trasferire dati da database on-premises, altri provider cloud o istanze database RDS per MariaDB esistenti all’istanza database RDS per MariaDB di destinazione. La funzionalità permette di consolidare i database, implementare soluzioni di disaster recovery o eseguire il passaggio da database autogestiti. Gli scenari più comuni includono il passaggio da server MariaDB in hosting autonomo a istanze database Amazon RDS completamente gestite, il consolidamento di più database MariaDB in una singola istanza database o la creazione di ambienti di test con dati di produzione. Le sezioni seguenti contengono istruzioni dettagliate per importare i dati MariaDB utilizzando metodi come mariadb-dump, file di backup o replica.

Fase 1: Creazione di file flat contenenti i dati da caricare

Per salvare i dati da caricare, utilizza un formato comune, come ad esempio valori separati da virgola (CSV). Ciascuna tabella deve possedere il proprio file. Non è possibile combinare i dati di più tabelle nello stesso file. Devi fornire a ciascun file lo stesso nome della tabella corrispondente. Il file può avere qualsiasi estensione. Ad esempio, se il nome della tabella è sales, il nome del file potrebbe essere sales.csv o sales.txt.

Se possibile, ordina i dati in base alla chiave primaria della tabella da caricare. In questo modo i tempi di caricamento risultano significativamente più rapidi e si riduce il consumo di spazio su disco.

La velocità e l'efficienza di questa procedura dipende dalla capacità di mantenere contenute le dimensioni dei file. Se le dimensioni di un qualsiasi file (non compresso) superano 1 GiB, suddividilo in più file da caricare separatamente.

Nei sistemi di tipo Unix (incluso Linux), puoi utilizzare il comando split. Ad esempio, il comando seguente divide il file sales.csv in vari file con dimensioni inferiori a 1 GiB. Le divisioni vengono effettuate solo sulle interruzioni di riga (-C 1024m). I nomi dei nuovi file includono suffissi numerici crescenti. Il comando seguente genera file con nomi come sales.part_00 e sales.part_01.

split -C 1024m -d sales.csv sales.part_

Utility simili sono disponibili anche per altri sistemi operativi.

È possibile archiviare i file flat ovunque. Tuttavia, quando si caricano i dati nella Fase 5, è necessario invocare la shell mysql dalla stessa posizione in cui si trovano i file o utilizzare il percorso assoluto dei file quando si esegue LOAD DATA LOCAL INFILE.

Fase 2: arrestare le applicazioni che accedono all’istanza database di destinazione

Prima di avviare il caricamento di grandi quantità di dati, arresta le attività di tutte le applicazioni che accedono all’istanza database in cui intendi eseguire il caricamento. Questa operazione è particolarmente consigliata se le altre sessioni modificano le tabelle caricate o quelle di riferimento. In questo modo, puoi ridurre i rischi di violazione dei vincoli e ottimizzare le prestazioni durante il caricamento. Inoltre, diventa possibile ripristinare l'istanza database al punto immediatamente precedente il caricamento, senza perdere le modifiche apportate dai processi che non sono coinvolti nell'operazione di caricamento.

Ovviamente, ci sono casi in cui l'esecuzione di questa operazione risulta impossibile o poco pratica. Se puoi evitare che alcune applicazioni accedano all'istanza database prima del caricamento, prendi tutte le misure necessarie per assicurare la disponibilità e l'integrità dei dati. Tali misure dipendono in larga parte dal tipo specifico di utilizzo e dai requisiti del sito.

Fase 3: Creazione di una snapshot DB

Se desideri caricare i dati in una nuova istanza database priva di dati, puoi ignorare questa parte. In caso contrario, si consiglia di creare snapshot di database dell’istanza database di destinazione Amazon RDS immediatamente prima e dopo il caricamento dei dati. Gli snapshot di database di Amazon RDS sono backup completi dell’istanza database che consentono di ripristinarla in uno stato noto. Quando avvii una snapshot DB, le operazioni I/O dell'istanza database vengono temporaneamente sospese per il backup.

Creando una snapshot DB immediatamente prima di caricare i dati ti consente di ripristinare il database allo stato precedente il caricamento, se fosse necessario. Una snapshot DB ottenuta immediatamente dopo il caricamento consente di non dover caricare nuovamente i dati in caso di problemi. È inoltre possibile utilizzare gli snapshot di database dopo il caricamento per importare dati in nuove istanze database.

L’esempio seguente utilizza il comando create-db-snapshot della AWS CLI per creare uno snapshot di database dell’istanza AcmeRDS e assegnare allo snapshot di database l’identificatore "preload".

Per Linux, macOS o Unix:

aws rds create-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Per Windows:

aws rds create-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

Puoi utilizzare anche la funzione di ripristino da snapshot DB per creare istanze database di prova in cui eseguire test o annullare modifiche apportate durante il caricamento.

Ricorda che il ripristino di un database da una snapshot DB crea una nuova istanza database che, come tutte le istanze database, possiede un identificatore e un endpoint univoci. Per ripristinare l'istanza database senza modificare l'endpoint, devi innanzitutto eliminare l'istanza database, in modo da poter riutilizzare l'endpoint.

Ad esempio, per creare un'istanza database in cui eseguire test di vario tipo, devi assegnare all'istanza database il proprio identificatore. Nell’esempio, l'identificatore è AcmeRDS-2". L'esempio si connette all'istanza database utilizzando l'endpoint associato a AcmeRDS-2. Per ulteriori informazioni, consulta restore-db-instance-from-db-snapshot.

Per Linux, macOS o Unix:

aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS-2 \ --db-snapshot-identifier preload

Per Windows:

aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS-2 ^ --db-snapshot-identifier preload

Per riutilizzare l'endpoint esistente, innanzitutto elimina l'istanza database e fornisci al database ripristinato lo stesso identificatore. Per ulteriori informazioni, consulta delete-db-instance.

L’esempio seguente crea uno snapshot di database finale dell’istanza database prima di eliminarla. Questo passaggio è facoltativo, ma è consigliato.

Per Linux, macOS o Unix:

aws rds delete-db-instance \ --db-instance-identifier AcmeRDS \ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Per Windows:

aws rds delete-db-instance ^ --db-instance-identifier AcmeRDS ^ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

Fase 4 (facoltativa): disattivare i backup automatici di Amazon RDS

avvertimento

Non disattivare i backup automatici se è necessario eseguire il recupero point-in-time.

La disattivazione dei backup automatici è utile per ottimizzare le prestazioni, ma non è indispensabile per il caricamento dei dati. La disattivazione dei backup automatici comporta l’eliminazione di tutti i backup esistenti. Di conseguenza, dopo aver disattivato i backup automatici, il recupero point-in-time non è più possibile. Gli snapshot DB manuali non sono influenzati dalla disattivazione dei backup automatici. Tutti gli snapshot DB esistenti rimangono disponibili per il ripristino.

La disattivazione dei backup automatici velocizza il tempo di caricamento di circa il 25% e riduce la quantità di spazio richiesto. Se devi caricare dati in una nuova istanza database che non contiene altri dati, la disattivazione dei backup rappresenta un'ottima soluzione per velocizzare il caricamento ed evitare di occupare troppo spazio con i backup. Tuttavia, in alcuni casi, potresti pianificare di caricare i dati in un'istanza database che contiene già altri dati. In tal caso, devi valutare se i vantaggi derivanti dalla disattivazione dei backup valgono il rischio di rinunciare alla possibilità di eseguire il ripristino point-in-time (PITR).

Per impostazione predefinita, i backup sono attivati per le istanze database (con un periodo di conservazione di un giorno). Per disabilitare i backup automatici, imposta il periodo di conservazione del backup su zero. Dopo il caricamento potrai riattivare i backup automatici impostando il periodo di conservazione su un valore diverso da zero. Per attivare o disattivare i backup, Amazon RDS chiude l’istanza database e la riavvia in modo da attivare o disattivare la registrazione di log MariaDB.

Usa il comando modify-db-instance della AWS CLI per impostare il periodo di conservazione dei backup su zero e applicare immediatamente la modifica. Per impostare il periodo di retention su zero è necessario riavviare l'istanza database, quindi prima di continuare dovrai attendere il completamento del riavvio. Per ulteriori informazioni, consulta modify-db-instance.

Per Linux, macOS o Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --apply-immediately \ --backup-retention-period 0

Per Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --apply-immediately ^ --backup-retention-period 0

È possibile controllare lo stato dell’istanza database con il comando della AWS CLI describe-db-instances. Nell’esempio seguente viene visualizzato lo stato dell’istanza database AcmeRDS.

aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"

Quando lo stato dell’istanza database è available, si può passare alla fase successiva.

Fase 5: Caricamento dei dati

Per leggere le righe dai file flat nelle tabelle del database, usa l’istruzione LOAD DATA LOCAL INFILE di MariaDB.

Nota

È necessario invocare la shell mariadb dalla stessa posizione in cui si trovano i file flat o utilizzare il percorso assoluto dei file quando si esegue LOAD DATA LOCAL INFILE.

L’esempio seguente mostra come caricare i dati da un file denominato sales.txt in una tabella denominata Sales nel database:

MariaDB [(none)]> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\'; Query OK, 1 row affected (0.01 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

Per ulteriori informazioni sull’istruzione LOAD DATA, consulta LOAD DATA INFILE nella documentazione MariaDB.

Fase 6: riattivare i backup automatici di Amazon RDS

Se nella Fase 4 sono stati disattivati, al termine del caricamento riattiva i backup automatici di Amazon RDS impostando il periodo di conservazione del backup sul valore originale. Come indicato nella Fase 4, Amazon RDS riavvia l’istanza database, interrompendo brevemente le attività.

Gli esempi seguenti utilizzano il comando modify-db-instance della AWS CLI per attivare i backup automatici per l’istanza database AcmeRDS e impostare il periodo di conservazione su un giorno:

Per Linux, macOS o Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --backup-retention-period 1 \ --apply-immediately

Per Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --backup-retention-period 1 ^ --apply-immediately