Restauración de una copia de seguridad en una instancia de base de datos de Amazon RDS para MySQL - Amazon Relational Database Service

Restauración de una copia de seguridad en una instancia de base de datos de Amazon RDS para MySQL

Amazon RDS admite la importación de bases de datos MySQL con archivos de copia de seguridad. Puede crear una copia de seguridad de la base de datos y, a continuación, almacenar el archivo de copia de seguridad en Amazon S3 y luego restaurar el archivo de copia de seguridad en una nueva instancia de base de datos de Amazon RDS que ejecuta MySQL. Amazon RDS admite la importación de archivos de copia de seguridad de Amazon S3 en todas las Regiones de AWS.

La situación descrita en esta sección restaura una copia de seguridad de una base de datos en las instalaciones. Siempre que la base de datos sea accesible, puede utilizar esta técnica para bases de datos en otras ubicaciones, como Amazon EC2 u otros servicios en la nube.

En el siguiente diagrama se muestran los escenarios admitidos.

Importación en MySQL de archivos de copia de seguridad desde S3.

Si la base de datos en las instalaciones puede estar sin conexión mientras se crean, se copian y se restauran archivos de copia de seguridad, recomendamos que utilice los archivos de copia de seguridad para importar la base de datos a Amazon RDS. Si la base de datos no puede estar sin conexión, puede usar uno de los métodos siguientes:

Información general de configuración para importar archivos de copia de seguridad de Amazon S3 a Amazon RDS

Para importar archivos de copia de seguridad de Amazon S3 a Amazon RDS, necesita los siguientes componentes:

  • Un bucket de Amazon S3 para almacenar los archivos de copia de seguridad.

    Si ya tiene un bucket de Amazon S3, puede utilizar ese bucket. Si no tiene un bucket de Amazon S3, cree uno nuevo. Para obtener más información, consulte Creación de un bucket.

  • una copia de seguridad de su base de datos local creada por Percona XtraBackup.

    Para obtener más información, consulte Creación de su copia de seguridad de base de datos.

  • Un rol de AWS Identity and Access Management (IAM) para permitir a Amazon RDS el acceso al bucket de S3.

    Si ya tiene un rol de IAM, puede usar ese rol y asociarle políticas de confianza y permisos. Para obtener más información, consulte Creación manual de un rol de IAM.

    Si no tiene un rol de IAM, tiene dos opciones:

Creación de su copia de seguridad de base de datos

Use el software Percona XtraBackup para crear su backup. Le recomendamos que utilice la última versión de Percona XtraBackup. Puede instalar Percona XtraBackup desde las descargas de software en el sitio web de Percona.

aviso

Cuando crea una copia de seguridad de base de datos, es posible que XtraBackup guarde credenciales en el archivo xtrabackup_info. Asegúrese de confirmar que la configuración de tool_command del archivo xtrabackup_info no contiene información confidencial.

La versión de Percona XtraBackup que utilice dependerá de la versión de MySQL de la que esté haciendo la copia de seguridad.

  • MySQL 8.4: utilice Percona XtraBackup versión 8.4.

  • MySQL 8.0: utilice Percona XtraBackup versión 8.0.

    nota

    Percona XtraBackup 8.0.12 y las versiones posteriores admiten la migración de todas las versiones de MySQL 8.0. Si migra a RDS para MySQL 8.0.32 o posterior, debe usar Percona XtraBackup 8.0.12 o posterior.

  • MySQL 5.7: utilice Percona XtraBackup versión 2.4.

Puede usar Percona XtraBackup para crear una copia de seguridad completa de los archivos de base de datos de MySQL. Como alternativa, si ya usa Percona XtraBackup para realizar las copias de seguridad de los archivos de la base de datos MySQL, puede cargar los archivos y los directorios de backup completos e incrementales.

Para obtener más información acerca de cómo realizar una copia de seguridad de la base de datos con Percona XtraBackup, consulte Percona XtraBackup: documentación en el sitio web de Percona.

Creación de una copia de seguridad completa con Percona XtraBackup

Para crear una copia de seguridad completa de los archivos de base de datos de MySQL que Amazon RDS pueda restaurar desde Amazon S3, use la utilidad Percona XtraBackup (xtrabackup).

Por ejemplo, el siguiente comando crea un backup de una base de datos MySQL y almacena los archivos en la carpeta /on-premises/s3-restore/backup.

xtrabackup --backup --user=myuser --password=password --target-dir=/on-premises/s3-restore/backup

Si desea comprimir la copia de seguridad en un solo archivo (que puede dividir en varios archivos posteriormente, si es necesario), puede guardar la copia de seguridad en uno de los siguientes formatos en función de la versión de MySQL:

  • Gzip (.gz): para MySQL 5.7 y versiones anteriores

  • tar (.tar): para MySQL 5.7 y versiones anteriores

  • Percona xbstream (.xbstream): para todas las versiones de MySQL

nota

Percona XtraBackUp 8.0 y superiores solo admite Percona xbstream para la compresión.

MySQL 5.7 y versiones anteriores

El siguiente comando crea una copia de seguridad de la base de datos MySQL dividido en varios archivos Gzip. Sustituya valores con su propia información.

xtrabackup --backup --user=my_user --password=password --stream=tar \ --target-dir=/on-premises/s3-restore/backup | gzip - | split -d --bytes=500MB \ - /on-premises/s3-restore/backup/backup.tar.gz

MySQL 5.7 y versiones anteriores

El siguiente comando crea una copia de seguridad de la base de datos MySQL dividido en varios archivos tar. Sustituya valores con su propia información.

xtrabackup --backup --user=my_user --password=password --stream=tar \ --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \ - /on-premises/s3-restore/backup/backup.tar

Todas las versiones de MySQL

El siguiente comando crea una copia de seguridad de la base de datos MySQL dividido en varios archivos xbstream. Sustituya valores con su propia información.

xtrabackup --backup --user=myuser --password=password --stream=xbstream \ --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \ - /on-premises/s3-restore/backup/backup.xbstream
nota

Si aparece el siguiente error, puede deberse a que se han mezclado formatos de archivo en el comando:

ERROR:/bin/tar: This does not look like a tar archive

Uso de copias de seguridad incrementales con Percona XtraBackup

Si ya usa Percona XtraBackup para realizar copias de seguridad completas e incrementales de sus archivos de base de datos MySQL, no tiene que crear una copia de seguridad completa y cargar los archivos del backup en Amazon S3. En su lugar, para ahorrar tiempo, copie los directorios y archivos de copia de seguridad existentes en el bucket de Amazon S3. Para obtener más información acerca de la creación de copias de seguridad incrementales con Percona XtraBackup, consulte Create an incremental backup en el sitio web de Percona.

Cuando copie los archivos de backup completos o incrementales en un bucket de Amazon S3, debe copiar repetidamente el contenido del directorio base. Esos contenidos incluyen la copia de seguridad completa y también todos los directorios y archivos de la copia de seguridad incremental. Esta copia debe mantener la estructura de directorios en el bucket de Amazon S3. Amazon RDS realiza iteraciones por todos los archivos y directorios. Amazon RDS utiliza el archivo xtrabackup-checkpoints incluido con cada copia de seguridad incremental para identificar el directorio base y ordenar las copias de seguridad incrementales por rango del número de secuencia del registro (LSN).

Consideraciones sobre copias de seguridad para Percona XtraBackup

Amazon RDS consume sus archivos de copia de seguridad en función del nombre de archivo. Asigne a los archivos de copia de seguridad la extensión de archivo adecuada en función del formato de archivo. Por ejemplo, utilice .xbstream para archivos almacenados con el formato xbstream de Percona.

Amazon RDS consume sus archivos de backup en orden alfabético, así como según la numeración natural. Para asegurarse de que la escritura y la asignación de nombre de los archivos de copia de seguridad se realice en el orden correcto, utilice la opción split al ejecutar el comando xtrabackup.

Amazon RDS no admite copias de seguridad parciales creados con Percona XtraBackup. No puede utilizar las siguientes opciones para crear una copia de seguridad parcial al realizar copias de seguridad de los archivos de origen de la base de datos:

  • --tables

  • --tables-exclude

  • --tables-file

  • --databases

  • --databases-exclude

  • --databases-file

Creación manual de un rol de IAM

Si no dispone de un rol de IAM, puede crear uno manualmente. Sin embargo, si restaura la base de datos mediante la AWS Management Console, le recomendamos que elija que Amazon RDS cree este nuevo rol de IAM automáticamente. Para que Amazon RDS cree este rol automáticamente, siga el procedimiento de la sección Importación de datos desde Amazon S3 a una nueva instancia de base de datos de MySQL.

Para crear manualmente un nuevo rol de IAM para importar la base de datos desde Amazon S3, cree un rol para delegar permisos de Amazon RDS al bucket de Amazon S3. Cuando cree un rol de IAM, debe asociar políticas de confianza y de permisos. Para importar sus archivos de copia de seguridad desde Amazon S3, utilice políticas de confianza y permisos similares a los siguientes ejemplos. Para obtener más información acerca de cómo crear un rol, consulte Crear un rol para delegar permisos a un servicio AWS.

Para utilizar las políticas de confianza y de permisos es necesario proporcionar un nombre de recurso de Amazon (ARN). Para obtener más información acerca del formato de los ARN, consulte Nombres de recursos de Amazon (ARN) y espacios de nombres de servicios de AWS.

ejemplo política de confianza para importar desde Amazon S3
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }
ejemplo política de permisos para importar desde Amazon S3: permisos de usuario de IAM

En el siguiente ejemplo, sustituya iam_user_id por su propio valor.

{ "Version":"2012-10-17", "Statement": [ { "Sid":"AllowS3AccessRole", "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::iam_user_id:role/S3Access" } ] }
ejemplo política de permisos para importar desde Amazon S3: permisos de rol

En el siguiente ejemplo, sustituya amzn-s3-demo-bucket y prefix con sus propios valores.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix*" }, { // If your bucket is encrypted, include the following permission. This permission allows decryption of your AWS KMS key. "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:region:customer_id:key/key_id*" ] } ] }
nota

Si incluye un prefijo del nombre de archivo, incluya el asterisco (*) después del prefijo. Si no desea especificar ningún prefijo, especifique únicamente un asterisco.

Importación de datos desde Amazon S3 a una nueva instancia de base de datos de MySQL

Puede importar datos desde Amazon S3 a una nueva instancia de base de datos de MySQL mediante la AWS Management Console, la AWS CLI o la API de RDS.

Para importar datos desde Amazon S3 a una nueva instancia de base de datos MySQL
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En la esquina superior derecha de la consola de Amazon RDS, elija la Región de AWS en la que desea crear la instancia de base de datos. Elija la misma Región de AWS que el bucket de Amazon S3 que contiene su copia de seguridad de base de datos.

  3. En el panel de navegación, seleccione Databases (Bases de datos).

  4. Elija Restore from S3 (Restaurar de S3).

    Aparecerá la página Create database by restoring from S3 (Crear base de datos restaurando desde S3).

    La página Crear base de datos restaurando desde S3, en la que especifica los detalles para restaurar una instancia de base de datos desde S3.
  5. En Origen de S3:

    1. Elija el bucket de S3 que contiene la copia de seguridad.

    2. (Opcional) Para prefijo de S3, escriba un prefijo de ruta de archivo para los archivos almacenados en el bucket de Amazon S3.

      Si no especifica un prefijo, Amazon RDS crea la instancia de base de datos con todos los archivos y carpetas de la carpeta raíz del bucket de S3. Si especifica un prefijo, Amazon RDS crea la instancia de base de datos con los archivos y carpetas del bucket de S3 cuya ruta completa del archivo empieza con el prefijo especificado.

      Por ejemplo, se almacenan los archivos de copia de seguridad en S3 en una subcarpeta denominada copias de seguridad y que tiene varios conjuntos de archivos de copia de seguridad, cada uno en su propio directorio (gzip_backup1, gzip_backup2, etc.). En este caso, para restaurar a partir de los archivos de la carpeta gzip_backup1, debe especificar el prefijo de backups/gzip_backup1.

  6. En Engine options (Opciones del motor):

    1. En Engine type (Tipo de motor), seleccione MySQL.

    2. En Source engine version (Versión del motor de origen), seleccione la versión principal de MySQL de su base de datos de origen.

    3. Para Version de motor, elija la versión secundaria predeterminada de su versión principal de MySQL en su Región de AWS.

      En AWS Management Console, solo está disponible la versión secundaria predeterminada. Después de completar la importación, puede actualizar la instancia de base de datos.

  7. Para el rol de IAM, cree o selección el rol de IAM con la política de confianza y la política de permisos requeridas que permitan a Amazon RDS acceder a su bucket de Amazon S3. Lleve a cabo una de las siguientes acciones:

    • (Recomendado) Elija Crear un nuevo rol e introduzca el Nombre de rol de IAM. Con esta opción, Amazon RDS crea automáticamente el rol con la política de confianza y la política de permisos.

    • Elija un rol de IAM existente. Asegúrese de que este rol cumpla con todos los criterios de Creación manual de un rol de IAM.

  8. Especifique la información de la instancia de base de datos. Para obtener más información acerca de cada ajuste, consulte Configuración de instancias de base de datos.

    nota

    Asegúrese de asignar almacenamiento suficiente para la nueva instancia de base de datos de modo que la operación de restauración pueda realizarse correctamente.

    Para permitir el crecimiento automático en el futuro, en Configuración de almacenamiento adicional, elija Habilitar el escalado automático del almacenamiento.

  9. Elija ajustes adicionales según sea necesario.

  10. Elija Create database (Crear base de datos).

Para importar datos desde Amazon S3 a una nueva instancia de base de datos de MySQL mediante la AWS CLI, llame al comando restore-db-instance-from-s3 con las siguientes opciones. Para obtener más información acerca de cada configuración, consulte Configuración de instancias de base de datos.

nota

Asegúrese de asignar almacenamiento suficiente para la nueva instancia de base de datos de modo que la operación de restauración pueda realizarse correctamente.

Para habilitar el escalado automático del almacenamiento y permitir el crecimiento futuro automáticamente, use la opción --max-allocated-storage.

  • --allocated-storage

  • --db-instance-identifier

  • --db-instance-class

  • --engine

  • --master-username

  • --manage-master-user-password

  • --s3-bucket-name

  • --s3-ingestion-role-arn

  • --s3-prefix

  • --source-engine

  • --source-engine-version

ejemplo

Para Linux, macOS o Unix:

aws rds restore-db-instance-from-s3 \ --allocated-storage 250 \ --db-instance-identifier my_identifier \ --db-instance-class db.m5.large \ --engine mysql \ --master-username admin \ --manage-master-user-password \ --s3-bucket-name amzn-s3-demo-bucket \ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \ --s3-prefix bucket_prefix \ --source-engine my_sql \ --source-engine-version 8.0.32 \ --max-allocated-storage 1000

Para Windows:

aws rds restore-db-instance-from-s3 ^ --allocated-storage 250 ^ --db-instance-identifier my_identifier ^ --db-instance-class db.m5.large ^ --engine mysql ^ --master-username admin ^ --manage-master-user-password ^ --s3-bucket-name amzn-s3-demo-bucket ^ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^ --s3-prefix bucket_prefix ^ --source-engine mysql ^ --source-engine-version 8.0.32 ^ --max-allocated-storage 1000

Para importar datos desde Amazon S3 a una nueva instancia de base de datos de MySQL mediante la API de Amazon RDS, llame a la operación RestoreDBInstanceFromS3.

Limitaciones y consideraciones para importar archivos de copia de seguridad de Amazon S3 a Amazon RDS

Las siguientes limitaciones y consideraciones se aplican a la importación de archivos de copia de seguridad de Amazon S3 a una instancia de base de datos de RDS para MySQL:

  • Solo puede migrar los datos a una nueva instancia de base de datos y no a una existente.

  • Debe utilizar Percona XtraBackup para realizar copias de seguridad de los datos en Amazon S3. Para obtener más información, consulte Creación de su copia de seguridad de base de datos.

  • El bucket de Amazon S3 y la instancia de base de datos de RDS para MySQL deben estar en la misma Región de AWS.

  • No puede restaurar desde los siguientes orígenes:

    • Exportación de una instantánea de instancia de base de datos a Amazon S3. Tampoco puede migrar datos desde una exportación de instantáneas de instancias de base de datos al bucket de Amazon S3.

    • Una base de datos de origen cifrada. Sin embargo, puede cifrar los datos que se están migrando. También puede dejar los datos sin cifrar durante el proceso de migración.

    • Una base de datos MySQL 5.5 o 5.6.

  • RDS para MySQL no admite Percona Server for MySQL como base de datos de origen, ya que puede contener tablas de compression_dictionary* en el mysql schema.

  • RDS para MySQL no admite la migración a versiones anteriores ni de las versiones principales ni de las secundarias. Por ejemplo, no puede migrar de la versión 8.0 de MySQL a RDS para MySQL 5.7, y no puede migrar de la versión 8.0.32 de MySQL a RDS para MySQL versión 8.0.26.

  • Amazon RDS no admite la importación en la clase de instancia de base de datos de db.t2.micro de Amazon S3. Sin embargo, puede restaurar a otra clase de instancia de base de datos y, a continuación, cambiar la clase de instancia de base de datos posteriormente. Para obtener más información sobre las clases de instancias, consulte Especificaciones de hardware para clases de instancia de base de datos .

  • Amazon S3 limita el tamaño de un archivo cargado en un bucket de Amazon S3 a 5 TB. Si un archivo de copia de seguridad supera los 5 TB, debe dividir el archivo de copia de seguridad en archivos más pequeños.

  • Amazon RDS limita el número de archivos cargados en un bucket de Amazon S3 a 1 millón. Si los datos de copia de seguridad de su base de datos, con todas las copias de seguridad completas e incrementales, superan 1 millón de archivos, use un archivo Gzip (.gz), tar (.tar.gz) o Percona xbstream (.xbstream) para almacenar archivos de copia de seguridad completas e incrementales en el bucket de Amazon S3. Percona XtraBackUp 8.0 solo admite Percona xbstream para la compresión.

  • Para proporcionar servicios de administración para cada instancia de base de datos, Amazon RDS crea el usuario rdsadmin al crear la instancia de base de datos. Como rdsamin es un usuario reservado en Amazon RDS, se aplican las siguientes limitaciones:

  • Amazon RDS no migra las tablas creadas por los usuarios en el esquema de mysql.

  • Debe configurar el parámetro innodb_data_file_path con un solo archivo de datos que utilice el nombre de archivo de datos predeterminado ibdata1:12M:autoextend. Puede migrar bases de datos con dos archivos de datos o con un archivo de datos con un nombre diferente, con este método.

    Los siguientes ejemplos son nombres de archivo que Amazon RDS no permite:

    • innodb_data_file_path=ibdata1:50M

    • ibdata2:50M:autoextend

    • innodb_data_file_path=ibdata01:50M:autoextend

  • No puede migrar de una base de datos de origen que tenga tablas definidas fuera del directorio de datos de MySQL predeterminado.

  • El tamaño máximo admitido para las copias de seguridad sin comprimir que utilizan este método está limitado a 64 TiB. En el caso de las copias de seguridad comprimidas, este límite es menor para ajustarse a los requisitos de espacio de descompresión. En esos casos, el tamaño máximo admitido de la copia de seguridad es 64 TiB - compressed backup size.

    Para obtener información sobre el tamaño máximo de base de datos admitido que RDS para MySQL admite, consulte Almacenamiento de SSD de uso general y Almacenamiento de SSD de IOPS aprovisionadas.

  • Amazon RDS no admite la importación de MySQL ni de otros componentes y complementos externos.

  • Amazon RDS no restaura todo lo que contiene la base de datos. Se recomienda guardar el esquema y los valores de la base de datos para los siguientes elementos de la base de datos del sistema de MySQL de origen y agregarlos a la instancia de base de datos de RDS para MySQL restaurada una vez creada:

    • Cuentas de usuario

    • Funciones

    • Procedimientos almacenados

    • Información de zona horaria. La información de zona horaria se carga desde el sistema operativo local de la instancia de base de datos de RDS para MySQL. Para obtener más información, consulte Zona horaria local para las instancias de bases de datos MySQL.

Objetos almacenados con “rdsamin'@'localhost' como definidor

Amazon RDS no importa funciones, procedimientos, vistas, eventos y desencadenadores con 'rdsadmin'@'localhost' como definidor.

Puede utilizar el siguiente script de SQL en la base de datos MySQL de origen para enumerar los objetos almacenados que tienen el definidor no admitido.

-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer. SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM information_schema.routines WHERE definer = 'rdsadmin@localhost'; -- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer. SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER FROM information_schema.triggers WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists events with `rdsadmin`@`localhost` as the definer. SELECT EVENT_SCHEMA, EVENT_NAME FROM information_schema.events WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists views with `rdsadmin`@`localhost` as the definer. SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.views WHERE DEFINER = 'rdsadmin@localhost';

Cuentas de usuario con privilegios no admitidos

Las cuentas de usuario con privilegios que RDS para MySQL no admite se importan sin los privilegios no admitidos. Para ver la lista de los privilegios admitidos, consulte Modelo de privilegios basado en roles de RDS para MySQL.

Puede ejecutar la siguiente consulta SQL en la base de datos de origen para enumerar las cuentas de usuario que tienen privilegios no admitidos.

SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'y' OR File_priv = 'y' OR Super_priv = 'y' OR Create_tablespace_priv = 'y';