PolarDB permet d'exporter une sauvegarde par snapshot depuis un cluster sur disque cloud au format CSV ou SQL. Ce fichier sert ensuite à restaurer les données vers une base de données MySQL auto-gérée.
Le script de restauration Python n'est plus maintenu. Évaluez-le soigneusement avant toute utilisation.
Prérequis
Exigences relatives au cluster PolarDB for MySQL
Pour garantir le succès de la restauration, la version de votre base de données auto-gérée doit correspondre exactement à celle du cluster source PolarDB for MySQL.
Le cluster doit satisfaire aux exigences suivantes :
Cluster : Cette fonctionnalité est disponible uniquement pour l'édition Cluster Edition des clusters Enterprise Edition.
-
Région : Chine (Chengdu), Chine (Guangzhou), Chine (Qingdao), Chine (Pékin), Chine (Shanghai), Chine (Zhangjiakou), Chine (Hangzhou), Chine (Shenzhen), Chine (Hong Kong), Malaisie (Kuala Lumpur), Indonésie (Jakarta), Japon (Tokyo), Singapour, États-Unis (Silicon Valley), États-Unis (Virginie) et Allemagne (Francfort).
RemarqueCette fonctionnalité sera bientôt disponible dans d'autres régions.
-
Autres :
L'utilisateur RAM doit disposer des permissions nécessaires pour télécharger les fichiers de sauvegarde. Pour accorder ces permissions à un utilisateur RAM, consultez la rubrique Permissions des utilisateurs RAM.
Les données de sauvegarde ne sont pas chiffrées. Le téléchargement des fichiers de sauvegarde depuis des clusters PolarDB chiffrés est impossible.
Une seule tâche de téléchargement (en cours d'exécution ou ayant échoué) est autorisée simultanément par cluster ou instance.
Exigences relatives à la base de données MySQL auto-gérée
Assurez-vous que le paramètre local_infile est activé sur votre base de données MySQL auto-gérée.
Vérifiez l'état du paramètre
local_infile. La valeurONindique qu'il est activé :SHOW GLOBAL VARIABLES LIKE 'local_infile';Activez le paramètre
local_infile:SET GLOBAL local_infile=1;
Limites
Les limites suivantes s'appliquent lors de la restauration de données depuis une sauvegarde téléchargée vers une base de données MySQL auto-gérée :
-
Les types de champs binaires suivants ne sont pas pris en charge : BIT, BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB et LONGBLOB.
RemarqueSi un jeu de sauvegarde contient ces types de champs, ils sont stockés au format hexadécimal. Vous devez alors utiliser manuellement la fonction
UNHEXdans la commandeload data local infilepour reconvertir les valeurs hexadécimales vers leur format binaire d'origine. Les types de champs spatiaux suivants ne sont pas pris en charge : GEOMETRY, POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON et GEOMETRYCOLLECTION.
Remarques d'utilisation
Utilisez la même version de base de données pour le cluster PolarDB for MySQL et la base de données MySQL auto-gérée. Des incompatibilités entre versions différentes peuvent provoquer l'échec de l'opération de restauration.
Avant d'exécuter la commande de restauration, assurez-vous que la base de données cible ne contient aucune base de données ou table portant le même nom que celles présentes dans les données de sauvegarde. Cela évite les conflits de données et les pertes potentielles. Supprimez au préalable toute base de données ou table conflictuelle.
L'interruption d'une tâche de restauration peut entraîner des données incomplètes ou l'échec de la tâche.
Procédure
Cet exemple illustre la restauration de données depuis un fichier de sauvegarde SQL d'un cluster PolarDB for MySQL vers une base de données MySQL auto-gérée hébergée sur une instance ECS (CentOS 7.8 64 bits). Adaptez les commandes à votre environnement spécifique.
Dans la console PolarDB, utilisez la fonctionnalité Télécharger les fichiers de sauvegarde pour convertir le fichier de sauvegarde du cluster au format CSV ou SQL. Téléchargez ensuite ce fichier sur votre machine locale ou sur une instance ECS.
-
(Facultatif) Vérifiez que le fichier de sauvegarde est bien décompressé dans le répertoire spécifié (
/home/mysql/data).ls -al /home/mysql/data -
Téléchargez le script Python sur votre machine locale ou votre instance ECS.
ImportantCe script est fourni à titre indicatif uniquement et peut nécessiter des modifications selon votre environnement. Utilisez-le avec prudence.
-
Rendez le script
restore_from_downloads.pyexécutable en exécutant la commande suivante :chmod +x ./restore_from_downloads.py -
Restaurez les données du fichier CSV ou SQL vers votre base de données auto-gérée :
python ./restore_from_downloads.py <path_to_csv_or_sql_directory> <database_endpoint> <database_port> <database_username> <database_password>Exemple :
python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********"RemarqueLa fermeture de la fenêtre du terminal interrompt l'exécution du script. Pour l'exécuter en arrière-plan, utilisez la commande suivante :
nohup python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tes********" > app.log 2>&1 &Sortie :
[root@ixxx ~]# python ./restore_from_downloads.py /home/mysql/data 127.0.0.1 3306 root "#Tesxxx" [INFO]: restore data from /home/mysql/data to 127.xxx:3306 mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure database: zhxxx ends mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore structure table: zhxxx ends [INFO]: trying to exec: mysql -h127.xxx -P3306 -uroot -p#Tesxxx </home/mysql/data/zxxx mysql: [Warning] Using a password on the command line interface can be insecure. [INFO]: restore data [1/1] of table zhxxx.zhxxxImportantAssurez-vous que votre base de données auto-gérée ne contient pas de base de données portant le même nom que l'une de celles présentes dans la sauvegarde. Dans le cas contraire, l'opération de restauration échouera.
Si le nom d'utilisateur ou le mot de passe de la base de données contient des caractères spéciaux, tels que des dièses (#) ou des espaces, placez la valeur entre guillemets doubles ("") lors de son passage en paramètre de ligne de commande. Par exemple, si le mot de passe est
#1234, vous devez passer"#1234"dans la ligne de commande.Une erreur du type
Command 'python' not foundsignifie que Python n'est pas installé ou n'est pas présent dans le PATH de votre système. Vérifiez votre installation Python ainsi que la commande utilisée pour l'exécuter. Par exemple, si Python 3 est installé, vous pouvez utiliserpython3 ./restore_from_downloads.py /home/mysql/data/test1.sql 127.0.0.1 3306 zhtxxxxx "#txxxxx".L'apparition du message d'avertissement
[Warning] Using a password on the command line interface can be insecurelors de l'exécution d'un script Python s'explique par l'utilisation de la commandemysql -h<database endpoint> -P<database port> -u<database username> -p<database password> -e<SQL>par le script. Cette méthode présente un risque de sécurité car d'autres utilisateurs du système peuvent consulter le mot de passe via des commandes comme ps. Cet avertissement n'affecte pas votre opération de récupération. Une fois la récupération terminée, connectez-vous à la base de données MySQL auto-gérée pour modifier le mot de passe du compte.Une erreur telle que
Access denied for user 'xxx'@'xxx' (using password: YES)signale un nom d'utilisateur ou un mot de passe incorrect. Vérifiez que vous avez saisi les identifiants correctement.