Importation de données à partir d'une source vers une instance de base de données MySQL ou MariaDB - Amazon Relational Database Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Importation de données à partir d'une source vers une instance de base de données MySQL ou MariaDB

Si vous disposez de plus d'1 Gio de données à charger ou que vos données sont issues d'une autre source qu'une base de données MySQL ou MariaDB, nous vous recommandons de créer des fichiers plats et de les charger avec mysqlimport. mysqlimport est un autre utilitaire de ligne de commande groupé avec le logiciel client MySQL et MariaDB, dont l'objet est de charger des fichiers plats dans MySQL ou MariaDB. Pour de plus amples informations sur mysqlimport, veuillez consulter mysqlimport - Programme d'importation de données dans la documentation MySQL.

Il est également recommandé de créer des snapshots DB de l'instance de base de données Amazon RDS cible avant et après le chargement de données. Les snapshots DB 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 snapshot DB, les opérations d'E/S 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 et peut être utilisé pour faire naître de nouvelles instances de bases de données.

La liste suivante montre les étapes à suivre. Chaque étape est présentée plus en détail ci-après.

  1. Créer les fichiers plats contenant les données à charger.

  2. Arrêter les applications accédant à l'instance de base de données cible.

  3. Créer un snapshot DB.

  4. Envisager la désactivation des sauvegardes Amazon RDS automatiques.

  5. Charger les données à l'aide de mysqlimport.

  6. Activer à nouveau les sauvegardes automatiques.

É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 « ventes », le nom du fichier peut être « ventes.csv » ou « ventes.txt », mais pas « sales_01.csv ».

Chaque fois que 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 1024m). Les nouveaux fichiers sont nommés sales.part_00, sales.part_01, etc.

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

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

Étape 2 : Arrêter les applications accédant à l'instance de base de données cible

Avant de démarrer un chargement volumineux, arrêtez toute activité d'application accédant à l'instance de base de données cible sur laquelle s'effectuera le chargement. Nous vous le conseillons vivement si d'autres sessions vont modifier les tables en cours de chargement ou celles auxquelles elles font référence. 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, la création d'un instantané de bases de données de votre instance de base de données vous permet, si nécessaire, de restaurer l'instance de base de données à son état avant le chargement. Comme précédemment évoqué, lorsque vous lancez un snapshot DB, les opérations d'E/S sur votre instance de base de données sont suspendues quelques minutes pendant la sauvegarde de la base de données.

Dans l'exemple ci-dessous, nous utilisons la commande create-db-snapshot de l'AWS CLI pour créer un instantané de base de données de notre instance AcmeRDS et lui attribuer l'identifiant « preload ».

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é de snapshot DB pour créer des instances de bases de données de test pour 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 l'exemple, « AcmeRDS-2 » est l'identifiant et nous nous connectons à l'instance de base de données à l'aide du point de terminaison associé à AcmeRDS-2.

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, nous devons d'abord supprimer l'instance de base de données, puis attribuer le même identifiant à la base de données restauré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

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

Étape 4 : Envisager la désactivation des sauvegardes Amazon RDS automatiques

Avertissement

Ne désactivez pas les sauvegardes automatiques si vous devez conserver la possibilité d'effectuer une restauration à un instant dans le passé.

Étant donné que la désactivation des sauvegardes automatiques efface toutes les sauvegardes existantes, la restauration à un instant dans le passé n'est pas possible une fois que les sauvegardes automatiques ont été désactivées. La désactivation des sauvegardes automatiques est une optimisation des performances et n'est pas requise pour les chargements de données. Les instantanés manuels de bases de données 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, si vous envisagez d'effectuer le chargement dans une instance de base de données qui contient déjà des données, vous devez évaluer les avantages de la désactivation des sauvegardes par rapport aux conséquences qu'entraînera la perte de la possibilité d'exécuter 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, vous devez définir la période de rétention des sauvegardes avec la valeur zéro. 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 doit arrêter l'instance de base de données et la redémarrer pour activer ou désactiver la journalisation MySQL ou MariaDB.

Utilisez la commande AWS CLI modify-db-instance de l'interface de ligne de commande AWS pour définir la période de rétention à la valeur de zéro et pour immédiatement appliquer la modification. 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 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 AWS CLI describe-db-instances. L'exemple montre comment afficher l'état de l'instance de base de données de l'instance de base de données AcmeRDS.

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

Lorsque l'état de l'instance de base de données est available, vous êtes prêt à continuer.

Étape 5 : Charger les données

Choisissez l'utilitaire mysqlimport pour charger les fichiers plats dans Amazon RDS. Dans l'exemple, nous demandons à mysqlimport de charger tous les fichiers « sales » dont l'extension commence par « part_ ». Il s'agit d'un moyen pratique de charger tous les fichiers créés dans l'exemple « split ». Utilisez l'option --compress pour réduire le trafic réseau. L'option --fields-terminated-by=',' est utilisée pour les fichiers CSV et l'option --local spécifie que les données entrantes se trouvent sur le client. Comme sans l'option --local, l'instance de base de données Amazon RDS recherche les données sur l'hôte de base de données, spécifiez toujours l'option --local.

Pour Linux, macOS ou Unix :

mysqlimport --local \ --compress \ --user=username \ --password \ --host=hostname \ --fields-terminated-by=',' Acme sales.part_*

Pour Windows :

mysqlimport --local ^ --compress ^ --user=username ^ --password ^ --host=hostname ^ --fields-terminated-by=',' Acme sales.part_*

Pour les chargements de données très volumineux, prenez régulièrement des snapshots DB supplémentaires entre les chargements de fichiers et notez les fichiers chargés. Si un problème se produit, vous pouvez sans peine reprendre à partir du point du dernier snapshot DB et éviter ainsi les rechargements très longs.

Étape 6 : Activer les sauvegardes automatiques Amazon RDS

Une fois le chargement terminé, réactivez les sauvegardes automatiques Amazon RDS en redéfinissant la période de rétention des sauvegardes à la valeur qui était la sienne avant le chargement. Comme noté précédemment, Amazon RDS redémarre l'instance de base de données. Par conséquent, préparez-vous à une brève interruption de service.

Dans l'exemple, nous utilisons la commande modify-db-instance de l'AWS CLI pour activer les sauvegardes automatiques pour l'instance de base de données AcmeRDS et définir la période de rétention sur 1 journée.

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