Las instrucciones DDL como DROP TABLE y DROP DATABASE no admiten reversa. Por lo tanto, si elimina una tabla por accidente, los datos se pierden de forma permanente. La papelera de reciclaje de tablas intercepta estas operaciones y traslada las tablas eliminadas a un área segura. Así dispone de tiempo para recuperarlas antes de que se purguen definitivamente.
La papelera de reciclaje de tablas utiliza la capacidad de almacenamiento del clúster, lo cual genera cargos de almacenamiento. Establezca el periodo de retención según sus necesidades de recuperación para evitar costos innecesarios.
Requisitos previos
Antes de empezar, asegúrese de que su clúster ejecuta una de las siguientes versiones del motor. Para comprobar la versión, consulte Engine versions.
PolarDB for MySQL 8.0.1 con la versión de revisión 8.0.1.1.2 o posterior
PolarDB for MySQL 8.0.2 con la versión de revisión 8.0.2.1.0 o posterior
Funcionamiento
Cuando usted ejecuta DROP TABLE o DROP DATABASE, PolarDB intercepta la operación. En lugar de eliminar los objetos de la tabla de forma permanente, los traslada a la base de datos del sistema __recycle_bin__. Se aplica el siguiente comportamiento:
Los triggers y las claves externas se eliminan y no se envían a la papelera.
Las estadísticas de columnas se trasladan a la papelera junto con la tabla.
Los objetos no relacionados con la tabla eliminada no se envían a la papelera. Su conservación depende de la instrucción específica que se haya ejecutado.
Para evitar conflictos de nombres cuando se trasladan tablas de distintas bases de datos a la misma base de datos __recycle_bin__, PolarDB renombra cada tabla reciclada con el siguiente formato:
"__" + <storage engine name> + <SE private ID>
En InnoDB, el SE private ID corresponde al table_id. Por ejemplo, una tabla InnoDB reciclada podría llamarse __innodb_1063.
La purga se ejecuta automáticamente en segundo plano. Un hilo en segundo plano purga de forma asíncrona las tablas que superaron el periodo definido por loose_recycle_bin_retention. Para las tablas grandes, un hilo independiente se encarga de la purga y así evita bloquear otras operaciones.
Reciclaje independiente: los nodos primarios y los nodos de solo lectura mantienen papeleras separadas con periodos de retención independientes. Por ejemplo, puede establecer una retención de 7 días para el nodo primario y de 14 días para los nodos de solo lectura.
Consideraciones
-
Cuando se inicia un clúster de PolarDB, se inicializa una base de datos llamada
__recycle_bin__que funciona como papelera de reciclaje. Esta es una base de datos del sistema, por lo que no es posible modificarla ni eliminarla. No es posible ejecutar
DROP TABLEdirectamente sobre las tablas de la papelera. Utilicecall dbms_recycle.purge_table('table_name')para purgar una tabla específica de forma manual.Para purgar tablas, su cuenta debe contar con el permiso DROP tanto en las tablas originales como en las tablas de la papelera.
Si la base de datos
__recycle_bin__y las tablas que desea reciclar están en sistemas de archivos distintos,DROP TABLEtraslada los archivos entre tablespaces. Este proceso puede tomar bastante tiempo.Si las tablas que desea reciclar están en un tablespace general que almacena varias tablas, solo se reciclan los datos de la tabla individual. Los archivos del tablespace no se trasladan.
Facturación
La papelera de reciclaje de tablas utiliza la capacidad de almacenamiento del clúster, lo cual genera cargos de almacenamiento. Para conocer los detalles de precios, consulte Reglas de facturación del almacenamiento.
Habilitar la papelera de reciclaje de tablas
Configure los siguientes parámetros para habilitar y ajustar la papelera de reciclaje de tablas.
|
Parámetro |
Alcance |
Valor predeterminado |
Valores válidos |
Descripción |
|
|
Global y de sesión |
OFF |
ON, OFF |
Habilita o deshabilita la papelera de reciclaje de tablas. |
|
|
Global |
OFF |
ON, OFF |
Habilita o deshabilita el hilo en segundo plano que purga automáticamente las tablas cuyo periodo de retención ya expiró. Si se establece en OFF, se ignora |
|
|
Global |
604800 (7 días) |
86400–1209600 (segundos) |
Periodo máximo de retención de los datos en la papelera. 604800 equivale a 7 días; 1209600 equivale a 14 días. Solo surte efecto cuando |
Habilite tantoloose_recycle_bincomoloose_recycle_schedulerpara asegurar que las tablas se purguen automáticamente después del periodo de retención. Si no habilita la purga automática, los datos reciclados se acumulan y generan cargos continuos de almacenamiento.
Gestionar las tablas de la papelera de reciclaje
PolarDB proporciona tres procedimientos almacenados dentro de dbms_recycle para gestionar las tablas recicladas.
Listar las tablas de la papelera de reciclaje
Ejecute la siguiente instrucción para ver todas las tablas que se encuentran actualmente en la papelera:
call dbms_recycle.show_tables();
Salida de ejemplo:
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
| SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
| __recycle_bin__ | __innodb_1063 | product_db | t1 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1064 | product_db | t2 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1065 | product_db | parent | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1066 | product_db | child | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
4 rows in set (0.00 sec)
A continuación se describen las columnas de la salida:
|
Columna |
Descripción |
|
|
El esquema de la papelera de reciclaje ( |
|
|
El nombre nuevo de la tabla tal como aparece en la papelera. |
|
|
El esquema original al que pertenecía la tabla antes de su eliminación. |
|
|
El nombre original de la tabla. |
|
|
La hora en que la tabla se trasladó a la papelera. |
|
|
La hora estimada en la que la tabla se purgará automáticamente. |
Restaurar una tabla desde la papelera de reciclaje
Ejecute la siguiente instrucción para restaurar una tabla reciclada hacia una base de datos y con un nombre de tabla específicos:
call dbms_recycle.restore_table('RECYCLE_TABLE', 'DEST_DB', 'DEST_TABLE');
|
Parámetro |
Descripción |
|
|
El nombre de la tabla en la papelera de reciclaje (por ejemplo, |
|
|
La base de datos de destino. |
|
|
El nombre nuevo para la tabla restaurada. |
Ejemplo: restaure __innodb_1063 en la base de datos testDB con el nombre testTable:
call dbms_recycle.restore_table('__innodb_1063', 'testDB', 'testTable');
restore_tablesolo es compatible con PolarDB for MySQL 8.0 Cluster Edition con la versión de revisión 8.0.1.1.12 o posterior. Para comprobar su versión, consulte Query the engine version . Su cuenta debe contar con los permisos ALTER_ACL y DROP_ACL en la base de datos__recycle_bin__, además de los permisos CREATE_ACL e INSERT_ACL en la tabla de destino.
Purgar una tabla de la papelera de reciclaje
Ejecute la siguiente instrucción para eliminar de forma permanente una tabla específica de la papelera antes de que expire su periodo de retención:
call dbms_recycle.purge_table('TABLE_NAME');
TABLE_NAME es el nombre de la tabla tal como aparece en la papelera de reciclaje (no el nombre original de la tabla).
Ejemplo: elimine de forma permanente __innodb_1063:
call dbms_recycle.purge_table('__innodb_1063');
Su cuenta debe contar con el permiso DROP tanto en la tabla original como en la tabla de la papelera de reciclaje.
Pasos siguientes
Si tiene dudas sobre las operaciones DDL, contáctenos.