La corbeille de tables protège contre la perte accidentelle de données causée par les instructions DROP TABLE. Les tables supprimées sont déplacées vers une base de données masquée nommée ADB_RECYCLE_BIN et conservées trois jours par défaut, ce qui vous laisse le temps de les récupérer avant leur suppression définitive.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster AnalyticDB for MySQL exécutant la version V3.2.3.0 ou ultérieure
Pour mettre à niveau la version mineure, contactez le support technique. Pour les clusters de l'édition Data Warehouse, consultez Mettre à jour la version mineure d'un cluster.
Limites
Types de tables pris en charge : uniquement les tables internes avec le moteur XUANWU ou XUANWU_V2. Les tables externes ne sont pas prises en charge.
Les tables présentes dans la corbeille continuent de consommer de l'espace de stockage sur disque.
L'exécution de
DROP TABLEalors qu'une instructionINSERT OVERWRITE SELECTest en cours déplace la table vers la corbeille et entraîne l'échec de l'instructionINSERT OVERWRITE SELECT.L'exécution de
DROP TABLEalors qu'une instructionBUILDest en cours déplace la table vers la corbeille sans interrompre l'instructionBUILD.Pour exécuter toute instruction liée à la corbeille (SHOW, RESTORE, PURGE), vous devez disposer de l'autorisation
DROPsur la table source. Seules les instructions PURGE, RESTORE et SHOW sont prises en charge pour les tables présentes dans la corbeille.
Fonctionnement
Lorsque vous exécutez une instruction DROP TABLE pour la première fois, AnalyticDB for MySQL crée une base de données masquée nommée ADB_RECYCLE_BIN et y déplace la table supprimée. Les instructions DROP TABLE suivantes déplacent les tables vers cette même base de données.
L'instruction DROP TABLE ... FORCE supprime définitivement la table et contourne la corbeille.
Période de conservation et mécanisme de nettoyage
Après son entrée dans la corbeille, une table est conservée trois jours par défaut et automatiquement supprimée à l'expiration de cette période. Vous pouvez personnaliser la période de conservation en configurant le paramètre RECYCLE_BIN_EXPIRED_TIME.
Nettoyage automatique à l'expiration de la période de conservation : les tables de la corbeille dont la durée de conservation (RECYCLE_BIN_EXPIRED_TIME) a expiré sont automatiquement supprimées.
-
Nettoyage automatique lorsque la limite du nombre de tables est atteinte : dans les versions V3.2.3.6, V3.2.4.3, V3.2.5.0 et ultérieures, si le nombre de tables a déjà atteint la limite supérieure au moment de la création d'une table, le système supprime automatiquement la table de la corbeille la plus proche de l'expiration. Une table doit être supprimée avant qu'une nouvelle table puisse être créée.
RemarqueQuelle table la corbeille supprime-t-elle automatiquement ?
Supposons que la corbeille contienne une table qui expire demain et une autre qui expire après-demain. La table qui expire demain est supprimée en premier.
Nettoyage manuel : exécutez manuellement
PURGEpour nettoyer la corbeille. Pour plus de détails, consultez Supprimer des tables de la corbeille.
Convention de nommage
Les tables provenant de différentes bases de données sont stockées dans une seule corbeille. Pour garantir l'unicité des noms, chaque table est renommée selon le format SourceDatabaseName_SourceTableName_Timestamp.
Exemple : une table customer de la base de données adb_demo, supprimée le 1er janvier 2024 à 00:00:00, est renommée adb_demo_customer_1704038400000.
Si le nom combiné dépasse la longueur maximale, le nom de la base de données source et le nom de la table sont tronqués séquentiellement et peuvent apparaître incomplets.
Si le même nom de table est à nouveau supprimé depuis la même base de données, il est stocké sous un horodatage différent.
Configurer la corbeille
Utilisez SET ADB_CONFIG pour configurer la corbeille.
| Paramètre | Valeur par défaut | Description |
|---|---|---|
DROP_FORCE |
FALSE |
Définissez sur TRUE pour supprimer définitivement les tables lors d'un DROP TABLE, en contournant la corbeille. Définissez sur FALSE pour déplacer les tables vers la corbeille. |
RECYCLE_BIN_EXPIRED_TIME |
259200000 (3 jours) |
Période de conservation en millisecondes. S'applique uniquement aux tables supprimées après la modification de ce paramètre. Les tables existantes dans la corbeille conservent leur période de conservation d'origine. |
ENABLE_RECYCLE_BIN_CLEAN_EXPIRED_TABLE |
TRUE |
Active ou désactive le thread de nettoyage en arrière-plan. Ne désactivez pas ce paramètre sauf si nécessaire pour le dépannage. |
RECYCLE_BIN_CLEAN_EXPIRED_TABLE_INTERVAL |
60000 (60 secondes) |
Intervalle en millisecondes auquel le thread de nettoyage s'exécute. |
RECYCLE_BIN_TABLE_COUNT_LIMIT_RATIO |
1.0 |
(V3.2.5.2 et ultérieures) Ratio entre le nombre de tables dans la corbeille et la limite totale du nombre de tables. Si le ratio dépasse cette valeur, le système nettoie automatiquement les tables les plus récemment ajoutées dans la corbeille. Pour plus d'informations, consultez Limites d'utilisation. Important
Le thread de nettoyage utilise le plus petit des seuils calculés à partir de |
RECYCLE_BIN_TABLE_COUNT_LIMIT |
5000 |
(V3.2.5.2 et ultérieures) Nombre maximal de tables pouvant être stockées dans la corbeille. Si ce nombre est dépassé, le système nettoie automatiquement les tables les plus récemment ajoutées. |
Modifier la période de conservation
SET adb_config RECYCLE_BIN_EXPIRED_TIME=<RetentionPeriodInMilliseconds>;
La nouvelle période de conservation s'applique uniquement aux tables supprimées après cette modification. Les tables déjà présentes dans la corbeille conservent leur heure d'expiration d'origine.
Exemple : définissez la période de conservation sur deux jours :
-- 2 days = 2 × 24 × 3600 × 1000 = 172,800,000 ms
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;
Interroger les tables de la corbeille
Syntaxe
-- List all tables in the recycle bin
SHOW RECYCLE_BIN ALL;
-- List tables from a specific source database and table name
SHOW RECYCLE_BIN TABLE <SourceDatabaseName>.<SourceTableName>;
-- List tables by source table name (across all databases)
SHOW RECYCLE_BIN TABLE <SourceTableName>;
-- List all tables from a specific source database
SHOW RECYCLE_BIN DATABASE <SourceDatabaseName>;
Exemples
Lister toutes les tables de la corbeille :
SHOW RECYCLE_BIN ALL;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
| testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Lister une table spécifique de adb_demo.customer :
SHOW RECYCLE_BIN TABLE adb_demo.customer;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Lister toutes les versions de la table customer dans toutes les bases de données :
SHOW RECYCLE_BIN TABLE customer;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Lister toutes les tables de la base de données adb_demo :
SHOW RECYCLE_BIN DATABASE adb_demo;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Restaurer des tables depuis la corbeille
Règles de restauration
Les tables restaurées utilisent leurs noms d'origine d'avant la suppression.
Si la base de données source contient déjà une table portant le même nom, renommez, supprimez ou déplacez cette table existante avant de procéder à la restauration.
Si plusieurs versions d'une table existent dans la corbeille (même base de données source et même nom de table, mais horodatages différents),
RESTORE RECYCLE_BIN ALLrestaure la version avec l'horodatage le plus récent et signale une erreur pour les autres versions.
Syntaxe
-- Restore all tables to their source databases
RESTORE RECYCLE_BIN ALL;
-- Restore a specific table using its recycle bin name
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
Le <NomTableCorbeille> correspond au nom affiché dans la colonne tableName de la sortie SHOW RECYCLE_BIN (format : SourceDatabaseName_SourceTableName_Timestamp).
Restaurer une version spécifique d'une table
Lorsque plusieurs versions d'une table supprimée existent dans la corbeille, suivez les étapes ci-dessous pour restaurer une version spécifique :
-
Interrogez la corbeille pour trouver toutes les versions et leurs noms dans la corbeille :
SHOW RECYCLE_BIN TABLE <SourceTableName>; Identifiez la version cible en comparant la colonne
recycledTimeavec le suffixe d'horodatage danstableName.-
Restaurez la version spécifique en utilisant son nom dans la corbeille :
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
Exemple : pour restaurer la table customer telle qu'elle existait avant la suppression du 04/07/2024 à 17:42:00 :
RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;
Supprimer des tables de la corbeille
Utilisez PURGE pour supprimer définitivement les tables de la corbeille avant leur expiration.
Syntaxe
-- Permanently delete all tables from the recycle bin
PURGE RECYCLE_BIN ALL;
-- Permanently delete a specific table from the recycle bin
PURGE RECYCLE_BIN TABLE <RecycleBinTableName>;
Exemple
Supprimer définitivement la table adb_demo_customer_1720086117277 :
PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;