Utilisez Percona XtraBackup pour restaurer une sauvegarde physique complète d'une instance ApsaraDB RDS for MySQL vers une base de données MySQL auto-gérée exécutée sous Linux.
Cette procédure nécessite un environnement Linux et s'applique uniquement aux instances RDS utilisant des disques locaux (Premium Local SSDs). Elle restaure l'intégralité des données contenues dans la sauvegarde, et non des bases de données ou des tables individuelles. Si votre configuration ne correspond pas à ces prérequis, consultez la section Limitations.
Fonctionnement
Téléchargez un fichier de sauvegarde physique depuis la console ApsaraDB RDS.
Décompressez le fichier à l'aide de
qpressetxbstream.Exécutez Percona XtraBackup pour restaurer les données dans un nouveau répertoire de données sur l'hôte MySQL auto-géré.
Démarrez le processus MySQL auto-géré en utilisant le répertoire de données restauré.
Connectez-vous à la base de données et vérifiez les données.
Limitations
Disques locaux uniquement. Les fichiers de sauvegarde physique sont disponibles uniquement pour les instances RDS utilisant des Premium Local SSDs. Si votre instance utilise des disques cloud, consultez Restaurer les données d'une instance ApsaraDB RDS for MySQL vers une instance MySQL auto-gérée à l'aide de fichiers de sauvegarde instantanés.
Restauration complète uniquement. Cette procédure restaure l'intégralité de la sauvegarde. Pour restaurer des bases de données ou des tables spécifiques, consultez Restaurer les données d'une instance ApsaraDB RDS for MySQL depuis un fichier de sauvegarde logique vers une instance MySQL auto-gérée.
Linux uniquement. La cible de restauration doit être une base de données MySQL exécutée sous Linux.
Pas de TDE. Les tables chiffrées avec Transparent Data Encryption (TDE) ne peuvent pas être restaurées via cette procédure. Déchiffrez toutes les tables avant de télécharger le fichier de sauvegarde. Pour vérifier, accédez à Data Security > TDE sur la page des détails de l'instance.
Pas de clusters MGR. Cette procédure ne prend pas en charge les clusters RDS utilisant le mode de réplication de groupe MySQL (MGR).
Prérequis
Avant de commencer, assurez-vous que :
Votre instance RDS exécute MySQL 8.0, 5,7, 5,6 ou 5,5 sur RDS High-availability Edition avec des Premium Local SSDs. Vérifiez ces informations sur la page Basic Information de l'instance.
Aucune table de l'instance n'est chiffrée avec TDE.
L'utilisateur RAM que vous utilisez dispose des autorisations nécessaires pour télécharger les fichiers de sauvegarde. Pour plus de détails, consultez Autoriser un utilisateur RAM avec des autorisations en lecture seule à télécharger des fichiers de sauvegarde.
La base de données MySQL auto-gérée exécute la même version majeure que votre instance RDS (par exemple, les deux exécutent MySQL 8.0).
La base de données MySQL auto-gérée s'exécute sous Linux. Les exemples de cette rubrique utilisent CentOS 7.9 64 bits.
Impacts potentiels
Si d'autres services sont en cours d'exécution dans la base de données MySQL auto-gérée, ils deviennent indisponibles pendant la restauration.
La restauration écrit les données dans un nouveau répertoire de données et n'affecte pas les données existantes de la base de données auto-gérée.
Facturation
Les sauvegardes manuelles consomment de l'espace de stockage de sauvegarde. Le stockage excédentaire au-delà du quota gratuit est facturé. Consultez Éléments facturables et tarification pour le stockage de sauvegarde d'une instance ApsaraDB RDS for MySQL.
Le téléchargement via Internet génère des frais de trafic si le trafic dépasse le quota gratuit. Pour éviter ces frais, téléchargez le fichier de sauvegarde à l'aide d'une URL interne lorsque l'hôte MySQL auto-géré et l'instance RDS se trouvent dans la même région et le même VPC. Consultez Frais de téléchargement.
Préparer l'environnement
1. Configurer les répertoires
Exécutez les commandes suivantes sur l'hôte Linux où réside la base de données MySQL auto-gérée.
Créez le backup decompression directory pour stocker les fichiers de sauvegarde décompressés :
sudo mkdir /var/mysql_bkdata
sudo chown -R $USER:$USER /var/mysql_bkdata
Créez le data directory vers lequel les données de sauvegarde seront restaurées :
sudo mkdir /var/mysql_newdata
sudo chown -R $USER:$USER /var/mysql_newdata
$USER:$USER fait référence à l'utilisateur actuel et au groupe d'utilisateurs, résolus automatiquement à partir de l'environnement. Aucune substitution n'est nécessaire.
2. Localiser le fichier de configuration MySQL
Le chemin du fichier de configuration varie selon la version de MySQL :
| Version MySQL | Chemin du fichier de configuration | |
|---|---|---|
| 8,0 / 5,7 | /etc/my.cnf |
|
| 5,6 | /usr/my.cnf |
|
| 5,5 | Exécutez `echo "[mysqld]" |
sudo tee /etc/my.cnf` pour le créer |
Pour trouver le chemin sur votre hôte :
sudo find / -name my.cnf
Si le résultat diffère du tableau ci-dessus, utilisez le chemin réel lors de l'exécution des commandes ultérieures.
3. Installer les outils
Version XtraBackup par version MySQL :
| Version RDS MySQL | XtraBackup à installer |
|---|---|
| MySQL 8.0 | RDS XtraBackup 8.0 (build personnalisé ApsaraDB) |
| MySQL 5.7 / 5,6 / 5,5 | Percona XtraBackup 2.4 |
Pour MySQL 8.0, utilisez la build XtraBackup fournie par ApsaraDB. La version open source de Percona XtraBackup peut présenter des problèmes de compatibilité avec les fichiers redo log de RDS.
Installer XtraBackup pour MySQL 8.0
Téléchargez le package correspondant au système d'exploitation de votre hôte et transférez-le sur le serveur (consultez Transférer ou télécharger des fichiers pour les instances ECS). Ensuite, installez-le. Le tableau suivant présente les liens de téléchargement et des exemples de commandes d'installation — les exemples supposent que le package est téléchargé dans /XtraBackup8.0/.
| Environnement hôte | Téléchargement | Commande d'installation |
|---|---|---|
| Linux 6 (x86_64) | RDS XtraBackup 8.0.rpm) | sudo yum localinstall -y /XtraBackup8.0/t-rds-xtrabackup-80-8.0.31-20230817110455.alios6.x86_64 |
| Linux 7 (x86_64) | RDS XtraBackup 8.0 | sudo yum localinstall -y /XtraBackup8.0/t-rds-xtrabackup-80-8.0.31-20230817110455.alios7.x86_64.rpm |
| Linux 7 (ARM AArch64) | RDS XtraBackup 8.0 | sudo yum localinstall -y /XtraBackup8.0/t-rds-xtrabackup-80-8.0.31-20230817110455.alios7.aarch64.rpm |
| Linux 8 (ARM AArch64) | RDS XtraBackup 8.0 | sudo yum localinstall -y /XtraBackup8.0/t-rds-xtrabackup-80-8.0.31-20230817110455.al8.aarch64.rpm |
Après l'installation, l'exécutable XtraBackup se trouve à l'emplacement /u01/xtrabackup80/bin/xtrabackup. Ce répertoire n'est pas ajouté automatiquement à PATH. Utilisez soit le chemin complet (comme indiqué dans cette rubrique), soit ajoutez manuellement le répertoire à PATH.
Installer XtraBackup pour MySQL 5.7, 5,6 ou 5,5
Installez Percona XtraBackup 2.4. Exemple utilisant la version 2.4.28 :
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.28/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.28-1.el7.x86_64.rpm
sudo yum localinstall -y percona-xtrabackup-24-2.4.28-1.el7.x86_64.rpm
Installer qpress
# Download the qpress executable
wget "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230406/flxd/qpress-11-linux-x64.tar"
# Extract the archive
tar -xvf qpress-11-linux-x64.tar
# Grant execute permissions
sudo chmod 775 qpress
# Make qpress available system-wide
sudo cp qpress /usr/bin
Étape 1 : Télécharger le fichier de sauvegarde
Connectez-vous à la console ApsaraDB RDS. Dans la barre de navigation supérieure, sélectionnez la région où réside votre instance RDS, puis cliquez sur l'ID de l'instance.
Dans le volet de navigation de gauche, cliquez sur Backup and Restoration.
-
Choisissez Base Backups > Data Backup. Recherchez le fichier de sauvegarde physique à télécharger et cliquez sur Download Instance Backup dans la colonne Actions.
Si aucun fichier de sauvegarde physique n'est disponible, créez-en un d'abord. Consultez Effectuer une sauvegarde manuelle d'une instance ApsaraDB RDS for MySQL.
Si la page Advanced Download s'affiche, votre instance utilise des disques cloud et cette procédure ne s'applique pas. Consultez plutôt Restaurer à l'aide de fichiers de sauvegarde instantanés.
-
Dans la boîte de dialogue Download Instance Backup Set, cliquez sur Copy Internal URL ou Copy Public URL.
Important- Internal URL : L'hôte MySQL auto-géré et l'instance RDS doivent se trouver dans le même VPC. Les VPC inter-régions et les configurations réseau classique vers VPC ne sont pas pris en charge. - Public URL : Des frais de trafic Internet s'appliquent si vous dépassez le quota gratuit. - Une URL de téléchargement est valide pendant 1 heure après sa génération. Actualisez la page pour obtenir une nouvelle URL si elle expire.
-
Sur l'hôte Linux, exécutez la commande suivante pour télécharger le fichier de sauvegarde. Remplacez l'URL par celle que vous avez copiée.
- Entourez l'URL de guillemets simples afin que le shell la traite comme une chaîne littérale. - Remplacez
test_xb.qppar le nom de fichier de votre choix, mais conservez la même extension que dans l'URL de téléchargement . - Extensions des fichiers de sauvegarde physique :_xb.qpou_qp.xbpour MySQL 8.0/5,7/5,6 ;tar.gzpour MySQL 5.5. - Ne modifiez ni ne supprimez un fichier de sauvegarde physique. Si vous devez modifier les données, restaurez-les d'abord dans la base de données auto-gérée.wget -c 'https://****.bak.rds.aliyuncs.com/****_xb.qp?****' -O test_xb.qp
Étape 2 : Décompresser le fichier de sauvegarde
Exécutez la commande de décompression correspondant à l'extension de votre fichier de sauvegarde. Remplacez le nom de fichier et le répertoire par vos valeurs réelles.
Assurez-vous que qpress et Percona XtraBackup sont installés avant d'exécuter ces commandes. Consultez Préparer l'environnement.
Fichiers _xb.qp
# MySQL 8.0
qpress -do test_xb.qp | /u01/xtrabackup80/bin/xbstream -x -v -C /var/mysql_bkdata/
# MySQL 5.5 / 5.6 / 5.7
qpress -do test_xb.qp | xbstream -x -v -C /var/mysql_bkdata/
Fichiers _qp.xb
# Step 1: Parse the file
cat test_qp.xb | xbstream -x -v -C /var/mysql_bkdata/
# Step 2: Decompress
## MySQL 5.5 / 5.6 / 5.7
innobackupex --decompress --remove-original /var/mysql_bkdata/
## MySQL 8.0
/u01/xtrabackup80/bin/xtrabackup --decompress --remove-original --target-dir=/var/mysql_bkdata/
Fichiers .tar.gz
tar -izxvf test.tar.gz -C /var/mysql_bkdata/
Fichiers .xb.gz
# MySQL 8.0
gzip -d -c test.xb.gz | /u01/xtrabackup80/bin/xbstream -x -v -C /var/mysql_bkdata/
# MySQL 5.5 / 5.6 / 5.7
gzip -d -c test.xb.gz | xbstream -x -v -C /var/mysql_bkdata/
Résolution des erreurs de décompression
Erreur : sh: qpress: command not found
Installez qpress. Consultez Préparer l'environnement.
Erreur : innobackupex introuvable (pour les fichiers _qp.xb)
Installez Percona XtraBackup. Consultez Préparer l'environnement.
Erreur : can't change to dir to xx (errorcode: no such file or directory) (pour les fichiers _qp.xb)
Vérifiez que le chemin du répertoire cible et le nom du fichier de sauvegarde sont corrects.
Étape 3 : Restaurer les données
Avant la restauration, arrêtez la base de données MySQL auto-gérée. Vérifiez la présence de processus MySQL en cours d'exécution et terminez-les :
ps -ef | grep '[m]ysql'
sudo kill -9 <PID>
Suivez les étapes correspondant à votre version de MySQL.
MySQL 8.0
3,1 Préparer la sauvegarde
/u01/xtrabackup80/bin/xtrabackup --defaults-file=/var/mysql_bkdata/backup-my.cnf \
--prepare --target-dir=/var/mysql_bkdata/
| Paramètre | Description |
|---|---|
--defaults-file |
Chemin vers backup-my.cnf dans le répertoire de décompression de la sauvegarde. Ce fichier est créé automatiquement lors de la décompression de la sauvegarde. |
--prepare |
Prépare la sauvegarde pour la restauration. |
--target-dir |
Le répertoire de décompression de la sauvegarde (/var/mysql_bkdata/ dans cet exemple). |
3,2 Mettre à jour datadir dans le fichier de configuration
Ouvrez le fichier de configuration :
sudo vim /etc/my.cnf
Définissez datadir sur le nouveau répertoire de données :
datadir = /var/mysql_newdata
Enregistrez et quittez (appuyez sur Esc, puis tapez :wq).
3,3 Définir la propriété des répertoires
chown -R mysql:mysql /var/mysql_newdata
3,4 Copier les données vers le nouveau répertoire de données
sudo xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/var/mysql_bkdata/
| Paramètre | Description |
|---|---|
--defaults-file |
Chemin vers my.cnf. XtraBackup lit datadir à partir de ce fichier pour déterminer la destination de la restauration. |
--copy-back |
Copie les données de sauvegarde vers le répertoire de données. |
--target-dir |
Le répertoire de décompression de la sauvegarde. XtraBackup copie les données de cet emplacement vers le répertoire de données. |
MySQL 5.7
3,1 Préparer la sauvegarde
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
| Paramètre | Description |
|---|---|
--defaults-file |
Chemin vers backup-my.cnf dans le répertoire de décompression de la sauvegarde. |
--apply-log |
Prépare la sauvegarde. Le chemin qui suit est le répertoire de décompression de la sauvegarde. |
3,2 Mettre à jour datadir et les paramètres InnoDB dans le fichier de configuration
Ouvrez le fichier de configuration :
sudo vim /etc/my.cnf
Définissez datadir et ajoutez les paramètres de tablespace undo InnoDB :
datadir = /var/mysql_newdata
innodb_undo_tablespaces=2
innodb_undo_directory=/var/mysql_newdata
La valeur de innodb_undo_tablespaces doit correspondre à la valeur indiquée dans /var/mysql_bkdata/backup-my.cnf. Vérifiez la valeur avec :
cat /var/mysql_bkdata/backup-my.cnf | grep innodb_undo_tablespaces
Enregistrez et quittez.
3,3 Copier les données vers le nouveau répertoire de données
sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/
| Paramètre | Description |
|---|---|
--defaults-file |
Chemin vers my.cnf. XtraBackup lit datadir à partir de ce fichier. |
--copy-back |
Copie les données de sauvegarde vers le répertoire de données spécifié par datadir. |
MySQL 5.6
3,1 Préparer la sauvegarde
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
3,2 Mettre à jour datadir dans le fichier de configuration
Ouvrez le fichier de configuration :
sudo vim /usr/my.cnf
Ajoutez le paramètre datadir :
datadir = /var/mysql_newdata
Enregistrez et quittez.
3,3 Copier les données vers le nouveau répertoire de données
sudo innobackupex --defaults-file=/usr/my.cnf --copy-back /var/mysql_bkdata/
MySQL 5.5
3,1 Préparer la sauvegarde
innobackupex --defaults-file=/var/mysql_bkdata/backup-my.cnf --apply-log /var/mysql_bkdata/
3,2 Mettre à jour datadir et les paramètres de journal InnoDB dans le fichier de configuration
Ouvrez le fichier de configuration :
sudo vim /etc/my.cnf
Ajoutez les paramètres datadir et de taille de fichier journal InnoDB :
datadir = /var/mysql_newdata
innodb_log_file_size=1048576000
La valeur de innodb_log_file_size doit correspondre à la valeur indiquée dans /var/mysql_bkdata/backup-my.cnf. Vérifiez la valeur avec :
cat /var/mysql_bkdata/backup-my.cnf | grep innodb_log_file_size
Enregistrez et quittez.
3,3 Copier les données vers le nouveau répertoire de données
sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /var/mysql_bkdata/
Résolution des erreurs de restauration
Erreur : xtrabackup: Unknown error 3613
Mettez à jour Percona XtraBackup vers la dernière version et réessayez.
Erreur : Original data directory /var/mysql_newdata is not empty!
Videz le répertoire et réessayez :
sudo rm -rf /var/mysql_newdata/*
Erreur : InnoDB: Encryption information in datafile: ./xxx.ibd can't be decrypted
Vérifiez si TDE est activé. Si des tables chiffrées existent, déchiffrez-les et recommencez la restauration depuis le début. Consultez Configurer TDE.
Si TDE est désactivé, vérifiez que la version correcte de XtraBackup est installée pour votre version de MySQL.
Erreur : innobackupex: File 'undo001' not found (Errcode: 2 - No Such file or directory)
Le format du fichier undo diffère selon la version de la base de données. Confirmez que la version de MySQL auto-gérée correspond à la version de l'instance RDS.
Étape 4 : Démarrer la base de données
MySQL 8.0 ou 5,7
-
(Facultatif) Si le paramètre
lower_case_table_namesde votre instance RDS est défini sur1, ajoutez le même paramètre àmy.cnf. Pour vérifier la valeur du paramètre, consultez Afficher les paramètres d'une instance ApsaraDB RDS for MySQL. Ouvrez le fichier :sudo vim /etc/my.cnfAjoutez :
lower_case_table_names=1Enregistrez et quittez.
-
Accordez la propriété du répertoire de données à l'utilisateur
mysql:sudo chown -R mysql:mysql /var/mysql_newdata -
Démarrez le processus MySQL :
Paramètre Description --defaults-fileChemin vers le fichier de configuration MySQL ( /etc/my.cnfdans cet exemple).--userL'utilisateur exécutant le processus de base de données. Toujours mysql.--datadirLe répertoire de données à utiliser au démarrage ( /var/mysql_newdatadans cet exemple).sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &
MySQL 5.6
-
(Facultatif) Si
lower_case_table_namesest1sur l'instance RDS, ajoutez-le à/usr/my.cnf:sudo vim /usr/my.cnfAjoutez :
lower_case_table_names=1Enregistrez et quittez.
-
Accordez la propriété du répertoire de données :
sudo chown -R mysql:mysql /var/mysql_newdata -
Démarrez le processus MySQL :
sudo mysqld --defaults-file=/usr/my.cnf --user=mysql --datadir=/var/mysql_newdata &
MySQL 5.5
-
Accordez la propriété du répertoire de données :
sudo chown -R mysql:mysql /var/mysql_newdata -
Démarrez le processus MySQL :
sudo mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/var/mysql_newdata &
Résolution des erreurs de démarrage
Erreur : mysqld: [ERROR] Failed to open required defaults file: /etc/my.cnf (Ubuntu)
AppArmor sur Ubuntu bloque l'accès au fichier de configuration. Exécutez :
apt install -y apparmor-utils
aa-complain /usr/sbin/mysqld
Erreur : error 1105 Unknown error après le démarrage, ou échec du démarrage de la base de données
Modifiez le moteur de stockage pour les tables système :
USE mysql;
ALTER TABLE proc ENGINE=myisam;
ALTER TABLE event ENGINE=myisam;
ALTER TABLE func ENGINE=myisam;
Si ERROR 1067 (42000): Invalid default value for 'modified' apparaît, exécutez d'abord ceci :
SET SQL_MODE='ALLOW_INVALID_DATES';
Erreur : InnoDB: Assertion failure in thread 140xxx in file page0zip.icne xxx
Cela indique généralement un espace disque insuffisant. Étendez le disque et réessayez.
Erreurs : [ERROR] Failed to open the relay log, [ERROR] Slave: Failed to initialize the master info, [ERROR] Failed to create or recover replication info repositories
Ces messages apparaissent car l'instance RDS utilise le mode HA, mais la base de données auto-gérée ne possède pas de nœuds primaire/secondaire. La base de données démarre normalement — ignorez ces erreurs.
Erreur : [ERROR] Data Dictionary initialization failed
Le système d'exploitation sous-jacent de RDS est Linux. Effectuez la restauration sur un hôte Linux pour éviter les problèmes de compatibilité du système d'exploitation.
Impossible de démarrer avec sudo systemctl start mysqld
SELinux peut s'exécuter en mode enforcing. Vérifiez avec :
getenforce
Dans les environnements de développement ou de test, changez le mode SELinux en permissive, puis exécutez
sudo systemctl start mysqld.Dans les environnements de production, vérifiez les journaux d'audit SELinux pour identifier l'opération bloquée et mettez à jour la politique SELinux en conséquence.
Étape 5 : Vérifier la restauration
-
Connectez-vous à la base de données MySQL auto-gérée :
Si vous avez oublié les identifiants, ajoutez
--skip-grant-tablesà la commande de démarrage (étape 4) pour contourner la vérification des autorisations. Réinitialisez les identifiants après la connexion.mysql -u<username> -p<password> -
Vérifiez que les bases de données attendues sont présentes :
SHOW DATABASES;Si vous ne voyez que des bases de données système ou un sous-ensemble de bases de données, redémarrez la base de données auto-gérée et reconnectez-vous en utilisant le compte
rootou le compte privilégié de l'instance RDS d'origine. Si les horodatages des données sont dans le mauvais fuseau horaire, définissez
time_zonesur la base de données auto-gérée pour qu'elle corresponde à l'instance RDS. Si le paramètretime_zonede RDS est défini sursystem, recherchez la région de l'instance RDS et utilisez le fuseau horaire correspondant.
Résolution des erreurs de connexion :
Erreur : Access denied for user 'XXX'
Vérifiez si le nom d'utilisateur et le mot de passe du compte utilisé pour se connecter à la base de données sont corrects. Le compte doit avoir été créé sur l'instance RDS.
Mot de passe après la restauration :
MySQL 5.7 ou 8,0 : Le mot de passe
rootest identique à celui de l'instance RDS.MySQL 5.5 ou 5,6 : Réinitialisez le mot de passe
root. Consultez la documentation MySQL sur la réinitialisation des autorisations.
FAQ
Étapes suivantes
Pour restaurer l'intégralité des données ou des bases de données et tables individuelles vers une autre instance RDS, consultez Restaurer l'intégralité des données ou Restaurer des bases de données et tables individuelles.
Pour un aperçu complet des méthodes de restauration, consultez Aperçu des méthodes de restauration des données.