Importation de données depuis n’importe quelle source vers une instance de base de données Amazon RDS for MySQL - Amazon Relational Database Service

Importation de données depuis n’importe quelle source vers une instance de base de données Amazon RDS for MySQL

Amazon RDS vous permet de migrer les données MySQL existantes depuis n’importe quelle source vers une instance de base de données RDS for MySQL. Vous pouvez transférer des données depuis des bases de données sur site, d’autres fournisseurs de cloud ou des instances de base de données RDS for MySQL existantes vers votre instance de base de données RDS for MySQL cible. Cette fonctionnalité vous permet de consolider les bases de données, de mettre en œuvre des solutions de reprise après sinistre ou d’y basculer à partir de bases de données autogérées. Les scénarios courants incluent le passage de serveurs MySQL auto-hébergés vers des instances de base de données Amazon RDS entièrement gérées, la consolidation de plusieurs bases de données MySQL en une seule instance de base de données ou la création d’environnements de test avec des données de production. Les sections suivantes fournissent des instructions étape par étape pour importer vos données MySQL à l’aide de méthodes telles que mysqldump, les fichiers de sauvegarde ou la réplication.

Étape 1 : Créer les fichiers plats contenant les données à charger

Utilisez un format courant, tel que CSV (valeurs séparées par des virgules), pour stocker les données à charger. Chaque table doit avoir son propre fichier ; les données de plusieurs tables ne peuvent pas être combinées dans le même fichier. Attribuez à chaque fichier le même nom que celui de la table à laquelle il correspond. L’extension du fichier est laissée à votre libre choix. Par exemple, si le nom de la table est sales, le nom du fichier peut être sales.csv ou sales.txt.

Si possible, triez les données sur la clé primaire de la table en cours de chargement. Cela améliore de façon spectaculaire les temps de chargement et réduit le stockage disque requis.

Cette procédure est d'autant plus rapide et efficace que les fichiers ont une petite taille. Si la taille non compressée d’un fichier est supérieure à 1 Gio, scindez-le en plusieurs fichiers et chargez chacun d’eux séparément.

Sur les systèmes Unix (Linux inclus), utilisez la commande split. Par exemple, la commande suivante fractionne le fichier sales.csv en plusieurs fichiers de moins d’1 Gio, le fractionnement n’intervenant qu’aux sauts de ligne (-C 1 024m). Les noms des nouveaux fichiers incluent des suffixes numériques croissants. La commande suivante génère des fichiers portant des noms tels que sales.part_00 et sales.part_01.

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

Des utilitaires semblables sont disponibles sur les autres systèmes d’exploitation.

Vous pouvez stocker les fichiers plats n’importe où. Toutefois, lorsque vous chargez les données à l’Étape 5, vous devez invoquer le shell mysql à partir de l’emplacement où se trouvent les fichiers, ou utiliser le chemin absolu des fichiers lors de l’exécution de LOAD DATA LOCAL INFILE.

Étape 2 : Empêcher les applications d’accéder à l’instance de base de données cible

Avant de démarrer un chargement volumineux, empêchez toute activité d’application d’accéder à l’instance de base de données cible sur laquelle s’effectuera le chargement. Nous le recommandons particulièrement quand d’autres sessions sont susceptibles de modifier les tables chargées ou les tables qu’elles référencent. Cela réduit le risque de violation des contraintes intervenant pendant le chargement et améliore les performances de chargement. Dans le même temps, cela permet également de restaurer l'instance de base de données au point juste antérieur au chargement sans perdre les modifications effectuées par les processus non impliqués dans le chargement.

Il est vrai que cela peut ne pas être possible ou pratique. Si vous ne pouvez pas empêcher les applications d'accéder à l'instance de base de données avant le chargement, prenez les mesures nécessaires pour garantir la disponibilité et l'intégrité de vos données. Les étapes spécifiques requises varient grandement en fonction de cas d’utilisation spécifiques et des exigences du site.

Étape 3 : Créer un instantané de base de données

Si vous envisagez de charger des données dans une nouvelle instance de base de données qui ne contient aucune donnée, vous pouvez ignorer cette étape. Sinon, nous vous recommandons de créer des instantanés de base de données de l’instance de base de données Amazon RDS cible avant et après le chargement de données. Les instantanés de base de données Amazon RDS sont des sauvegardes complètes de votre instance de base de données qui peuvent être utilisées pour restaurer l’instance de base de données à un état connu. Lorsque vous lancez un instantané de bases de données, les opérations I/O sur votre instance de base de données sont momentanément suspendues pendant la sauvegarde de la base de données.

La création d’un instantané de base de données juste avant le chargement vous permet, si besoin est, de restaurer la base de données à son état avant le chargement. Un instantané de base de données pris immédiatement après le chargement vous évite de devoir charger les données à nouveau en cas d’incident. Vous pouvez également utiliser des instantanés de base de données après le chargement pour importer des données dans de nouvelles instances de base de données.

L’exemple suivant utilise la commande create-db-snapshot de l’AWS CLI pour créer un instantané de base de données de l’instance AcmeRDS et attribue l’identifiant "preload" à l’instantané de bases de données.

Pour Linux, macOS ou Unix :

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

Pour Windows :

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

Vous pouvez aussi utiliser la restauration de la fonctionnalité d’instantané de bases de données pour créer des instances de bases de données de test dans le but de réaliser des essais ou pour annuler les modifications effectuées pendant le chargement.

Gardez à l’esprit que la restauration d’une base de données à partir d’un instantané de bases de données crée une nouvelle instance de base de données qui, comme toutes les instances de base de données, possède un point de terminaison et un identifiant unique. Si vous devez restaurer l'instance de base de données sans modifier le point de terminaison, vous devez d'abord supprimer l'instance de base de données de telle sorte que le point de terminaison puisse être réutilisé.

Par exemple, pour créer une instance de base de données pour les essais ou autres tests, vous attribuez à l'instance de base de données son propre identifiant. Dans cet exemple, l'identifiant est AcmeRDS-2. L’exemple se connecte à l’instance de base de données à l’aide du point de terminaison associé à AcmeRDS-2. Pour plus d’informations, consultez restore-db-instance-from-db-snapshot.

Pour Linux, macOS ou Unix :

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

Pour Windows :

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

Pour réutiliser le point de terminaison existant, il faut d’abord supprimer l’instance de base de données, puis donner le même identifiant à la base de données restaurée. Pour plus d’informations, consultez delete-db-instance.

L’exemple suivant prend également un instantané de base de données final de l’instance de base de données avant de la supprimer. Cette action est facultative, mais recommandée.

Pour Linux, macOS ou 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

Pour 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

Étape 4 (facultative) : Désactiver les sauvegardes automatiques Amazon RDS

Avertissement

Ne désactivez pas les sauvegardes automatiques si vous devez conserver la possibilité d’effectuer une reprise ponctuelle.

La désactivation des sauvegardes automatiques est une optimisation des performances et n’est pas requise pour les chargements de données. La désactivation des sauvegardes automatiques efface toutes les sauvegardes existantes. Par conséquent, après la désactivation des sauvegardes automatiques, la reprise ponctuelle n’est pas possible. Les instantanés de bases de données manuels ne sont pas affectés par la désactivation des sauvegardes automatiques. Tous les instantanés manuels de base de données existants demeurent disponibles pour la restauration.

La désactivation des sauvegardes automatiques réduit le temps de chargement de près de 25 %, ainsi que la quantité d'espace de stockage requise pendant le chargement. Si vous envisagez de charger des données dans une nouvelle instance de base de données qui ne contient aucune donnée, la désactivation des sauvegardes constitue un moyen simple d'accélérer le chargement et d'éviter d'utiliser le stockage supplémentaire nécessaire pour les sauvegardes. Cependant, dans certains cas, vous pouvez envisager de charger dans une instance de base de données qui contient déjà des données. Si tel est le cas, évaluez les avantages de la désactivation des sauvegardes par rapport à l'impact de la perte de la capacité à effectuer une restauration à un instant dans le passé.

Les instances de bases de données ont les sauvegardes automatiques activées par défaut (avec une période de rétention égale à une journée). Pour désactiver les sauvegardes automatiques, définissez la période de rétention des sauvegardes à 0. Après le chargement, vous pouvez réactiver les sauvegardes en définissant la période de rétention des sauvegardes avec une valeur différente de zéro. Pour activer ou désactiver les sauvegardes, Amazon RDS arrête l’instance de base de données, puis la redémarre pour activer ou désactiver la journalisation MySQL.

Utilisez la commande modify-db-instance de l’AWS CLI pour définir la période de rétention sur la valeur de zéro et pour appliquer la modification immédiatement. Comme la définition de la période de rétention à la valeur zéro nécessite un redémarrage de l’instance de base de données, attendez que le redémarrage soit terminé avant de poursuivre. Pour plus d’informations, consultez modify-db-instance.

Pour Linux, macOS ou Unix :

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

Pour Windows :

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

Vous pouvez vérifier le statut de votre instance de base de données avec la commande describe-db-instances de l’AWS CLI. L’exemple suivant montre comment afficher le statut de l’instance de base de données AcmeRDS.

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

Lorsque le statut de l’instance de base de données est available, vous êtes prêt à continuer.

Étape 5 : Charger les données

Pour lire les lignes de vos fichiers plats dans les tables de base de données, utilisez l’instruction MySQL LOAD DATA LOCAL INFILE.

Note

Vous devez invoquer le shell mysql à partir de l’emplacement où se trouvent vos fichiers plats, ou utiliser le chemin absolu des fichiers lors de l’exécution de LOAD DATA LOCAL INFILE.

L’exemple suivant montre comment charger les données d’un fichier nommé sales.txt dans une table nommée Sales dans la base de données :

mysql> 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

Pour plus d’informations sur l’instruction LOAD DATA, consultez Instruction LOAD DATA dans la documentation MySQL.

Étape 6 : Réactiver les sauvegardes automatiques Amazon RDS

Si vous avez désactivé les sauvegardes automatiques Amazon RDS lors de l’étape 4, une fois le chargement terminé, réactivez-les en redéfinissant la période de rétention des sauvegardes à la valeur qui était la sienne avant le chargement. Comme noté dans l’étape 4, Amazon RDS redémarre l’instance de base de données. Par conséquent, préparez-vous à une brève interruption de service.

L’exemple suivant exécute la commande modify-db-instance de l’AWS CLI pour activer les sauvegardes automatiques de l’instance de base de données AcmeRDS et définir la période de rétention sur un jour :

Pour Linux, macOS ou Unix :

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

Pour Windows :

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