Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Papelera de reciclaje

Última actualización: Oct 09, 2026

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.

Importante

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 TABLE traslada la tabla original a un directorio dedicado de la papelera de reciclaje. En su lugar, crea una tabla nueva con la misma estructura.

      Nota

      Esta 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 TABLE o DROP DATABASE traslada ú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 table sobre las tablas de la papelera de reciclaje, sí se pueden purgar con el comando call dbms_recycle.purge_table('<TABLE>');.

    Nota

    La cuenta requiere el permiso DROP tanto 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.

    Nota

    Los 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 table inicia 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 DROP tanto 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.

      Nota

      Si 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.

      Nota

      El comando restore_table requiere el permiso SUPER. 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ón INSERT ... SELECT para 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