Las operaciones DDL accidentales, como DROP TABLE, provocan pérdida de datos porque no se pueden revertir. Para mitigar este riesgo, Alibaba Cloud ofrece la función de papelera de reciclaje. Esta función traslada temporalmente las tablas eliminadas a una papelera y le permite configurar un periodo de retención para facilitar la recuperación de datos. Además, incluye el paquete DBMS_RECYCLE para su gestión.
Requisitos previos
La instancia ejecuta una de a continuación versiones:
RDS for MySQL 8.4
RDS for MySQL 8.0 con una versión secundaria del motor 20191225 o posterior
RDS for MySQL 5.7 con una versión secundaria del motor 20210430 o posterior
Parámetros de la papelera de reciclaje
La función de papelera de reciclaje incluye cinco parámetros:
|
Parámetro |
Descripción |
|
loose_recycle_bin |
Indica si se habilita la función de papelera de reciclaje en el nivel de sesión y global. Este parámetro se modifica desde la consola. Valor predeterminado: OFF. |
|
loose_recycle_bin_retention |
Define el periodo de retención, en segundos, de las tablas en la papelera de reciclaje. El valor predeterminado es 604,800 (una semana). Este parámetro se modifica desde la consola. |
|
loose_recycle_scheduler |
Indica si se habilita el hilo de purga asíncrona para la papelera de reciclaje. Este parámetro se modifica desde la consola. Valor predeterminado: OFF. |
|
loose_recycle_scheduler_interval |
Intervalo de sondeo del hilo de purga asíncrona, en segundos. El valor predeterminado es 30. Este parámetro no se puede modificar. |
|
loose_recycle_scheduler_purge_table_print |
Indica si se imprimen registros detallados para las operaciones de purga asíncrona. Valor predeterminado: OFF. Este parámetro no se puede modificar. |
Para evitar que se agote el espacio en disco, establezca un periodo de retención adecuado y habilite el hilo de purga en segundo plano.
Funcionamiento
-
Mecanismo de reciclaje y purga
-
Mecanismo de reciclaje
Una instrucción
TRUNCATE TABLEtraslada la tabla original a un directorio dedicado de la papelera de reciclaje. En su lugar, crea una tabla nueva con la misma estructura.NotaEsta función solo es compatible con a continuación versiones:
RDS for MySQL 8.4
RDS for MySQL 8.0 con una versión secundaria del motor 20200331 o posterior
Una instrucción
DROP TABLEoDROP DATABASEtraslada únicamente los objetos de tabla relacionados a un directorio dedicado de la papelera de reciclaje. Los demás objetos se gestionan de la siguiente manera:La operación no recicla los objetos que no están relacionados con la tabla. Estos se conservan o se eliminan según la instrucción específica de la operación.
La operación elimina los objetos dependientes que pueden modificar los datos de la tabla, como los triggers y las claves externas. Sin embargo, no purga las estadísticas de columnas, sino que las traslada a la papelera junto con la tabla.
-
Mecanismo de purga
La papelera de reciclaje inicia un hilo en segundo plano para purgar de forma asíncrona los objetos de tabla que superaron el periodo de retención definido por el parámetro loose_recycle_bin_retention. Si durante la purga se detecta una tabla grande, se inicia otro hilo en segundo plano para eliminarla de forma asíncrona.
-
-
Permisos
Cuando se inicia una instancia de RDS for MySQL, se inicializa una base de datos llamada
__recycle_bin__, que se usa exclusivamente para la papelera de reciclaje.__recycle_bin__es una base de datos del sistema que no se puede modificar ni eliminar directamente.Aunque no se puede ejecutar directamente una instrucción
drop tablesobre las tablas de la papelera de reciclaje, sí se pueden purgar con el comandocall dbms_recycle.purge_table('<TABLE>');.NotaLa cuenta requiere el permiso
DROPtanto en la tabla original como en la tabla ubicada en la papelera de reciclaje. -
Convención de nombres de tablas en la papelera de reciclaje
La papelera de reciclaje consolida las tablas de distintas bases de datos en la única base de datos
__recycle_bin__. Para garantizar que los nombres de las tablas sean únicos, la papelera utiliza el formato siguiente:"__" + <Storage Engine> + <SE private id>En a continuación tabla se describen los componentes del formato de nombres.
Parámetro
Descripción
Storage engine
Nombre del motor de almacenamiento.
SE private id
Identificador único que genera el motor de almacenamiento para cada tabla. Por ejemplo, en el motor InnoDB corresponde al identificador de la tabla.
-
Reciclaje independiente
La configuración de la papelera de reciclaje afecta únicamente a la instancia local y no se propaga a los nodos con replicación de registros habilitada, como las instancias secundarias, las instancias de solo lectura y las instancias de recuperación ante desastres. Por ejemplo, se puede configurar un periodo de retención de 7 días en la instancia principal y uno de 14 días en la instancia secundaria.
NotaLos periodos de retención distintos pueden generar diferencias significativas en el uso de espacio en disco entre las instancias.
Notas de uso
Si la base de datos de la papelera de reciclaje y la tabla que se va a reciclar residen en sistemas de archivos distintos, ejecutar una instrucción
drop tableinicia una migración de archivos de datos que consume bastante tiempo.Cuando una tabla comparte un tablespace general con otras tablas, reciclarla no traslada el archivo de datos relacionado.
Gestión de la papelera de reciclaje
AliSQL proporciona tres funciones en el paquete DBMS_RECYCLE para gestionar la papelera de reciclaje:
-
Consultar las tablas de la papelera de reciclaje
Para consultar todas las tablas de la papelera de reciclaje, utilice el comando siguiente del paquete
DBMS_RECYCLE:call dbms_recycle.show_tables();Ejemplo:
mysql> call dbms_recycle.show_tables(); +-----------------+---------------+---------------+--------------+---------------------+---------------------+ | 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)Parámetro
Descripción
SCHEMA
Nombre de la base de datos de la papelera de reciclaje.
TABLE
Nombre de la tabla en la papelera de reciclaje.
ORIGIN_SCHEMA
Nombre original de la base de datos.
ORIGIN_TABLE
Nombre original de la tabla.
RECYCLED_TIME
Hora en la que se trasladó la tabla a la papelera de reciclaje.
PURGE_TIME
Hora programada para purgar la tabla de la papelera de reciclaje.
-
Purgar manualmente una tabla de la papelera de reciclaje
Para purgar manualmente una tabla de la papelera de reciclaje, utilice el comando siguiente del paquete
DBMS_RECYCLE:call dbms_recycle.purge_table('<TABLE>');Nota<TABLE>es el nombre de la tabla en la papelera de reciclaje.La cuenta requiere el permiso
DROPtanto en la tabla original como en la tabla ubicada en la papelera de reciclaje.
Ejemplo:
call dbms_recycle.purge_table('__innodb_1063'); -
Restaurar una tabla desde la papelera de reciclaje
-
Para restaurar una tabla desde la papelera de reciclaje, utilice la interfaz que proporciona el paquete
DBMS_RECYCLE.El comando es el siguiente:
call dbms_recycle.restore_table('<RECYCLE_TABLE>','<DEST_DB>','<DEST_TABLE>');En a continuación tabla se describen los parámetros.
Parámetro
Descripción
RECYCLE_TABLE
Nombre de la tabla en la papelera de reciclaje que se va a restaurar.
NotaSi solo especifica este parámetro, la tabla se restaura en su ubicación original y con su nombre original.
DEST_DB
Nombre de la base de datos de destino.
DEST_TABLE
Nombre de la tabla de destino.
NotaEl comando
restore_tablerequiere el permisoSUPER. Como este permiso no se otorga a las cuentas de usuario, no se puede ejecutar el comando de forma manual.Ejemplo:
mysql> call dbms_recycle.restore_table('__innodb_1063','testDB','testTable'); -
Restaure los datos de una tabla en la papelera de reciclaje mediante
INSERT ... SELECT.Primero, consulte todas las tablas de la papelera de reciclaje para encontrar el nombre de la tabla que desea restaurar en la base de datos
__recycle_bin__. Después, cree una tabla de destino con la misma estructura y utilice una instrucciónINSERT ... SELECTpara importar los datos a dicha tabla. Por ejemplo:mysql> call dbms_recycle.show_tables(); +-----------------+---------------+---------------+--------------+---------------------+---------------------+ | SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME | +-----------------+---------------+---------------+--------------+---------------------+---------------------+ | __recycle_bin__ | __innodb_1132 | sbtest | sbtest1 | 2024-07-31 15:08:56 | 2024-08-07 15:08:56 | +-----------------+---------------+---------------+--------------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> CREATE TABLE `db1`.`t1` ( -> `id` int NOT NULL AUTO_INCREMENT, -> `k` int NOT NULL DEFAULT '0', -> `c` char(120) NOT NULL DEFAULT '', -> `pad` char(60) NOT NULL DEFAULT '', -> PRIMARY KEY (`id`), -> KEY `k_1` (`k`) -> ) ENGINE=InnoDB AUTO_INCREMENT=400001 DEFAULT CHARSET=utf8mb3; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> insert into `db1`.`t1` select * from `__recycle_bin__`.`__innodb_1132`; Query OK, 400000 rows affected (2.76 sec) Records: 400000 Duplicates: 0 Warnings: 0
-