Importación de datos de cualquier origen a una instancia de base de datos de MySQL o MariaDB - Amazon Relational Database Service

Importación de datos de cualquier origen a una instancia de base de datos de MySQL o MariaDB

Si debe cargar más de 1 GiB de datos o si los datos provienen de un origen distinto de una base de datos de MariaDB o MySQL, recomendamos crear archivos sin formato y cargarlos con mysqlimport. La utilidad mysqlimport es otra utilidad de línea de comandos incluida en el software cliente de MySQL y MariaDB. Su propósito es cargar archivos sin formato en MySQL o MariaDB. Para obtener información acerca de mysqlimport, consulte mysqlimport - A Data Import Program en la documentación de MySQL.

También recomendamos crear instantáneas de bases de datos de la instancia de base de datos de Amazon RDS elegida como destino antes de proceder a la carga de los datos. Las instantáneas de base de datos de Amazon RDS son copias de seguridad completos de una instancia de base de datos que se pueden usar para restaurarla a un estado conocido. Cuando se inicia una instantánea de base de datos, las operaciones de E/S de la instancia de base de datos se suspenden de forma temporal mientras se crea una copia de seguridad de la base de datos.

La creación de una instantánea de base de datos inmediatamente antes de la carga permite restaurar la base de datos al estado previo a la carga, si es necesario. Una instantánea de base de datos tomada inmediatamente después de la carga le evita tener que volver a cargar los datos en caso de error y se puede usar además para inicializar nuevas instancias de bases de datos.

La siguiente lista muestra los pasos que se deben dar. A continuación, se analiza con más detalle cada paso.

  1. Crear archivos sin formato con los datos que se van a cargar.

  2. Detener las aplicaciones con acceso a la instancia de base de datos de destino.

  3. Crear una instantánea de base de datos.

  4. Considere desactivar las copias de seguridad automatizadas de Amazon RDS.

  5. Cargar los datos con mysqlimport.

  6. Volver a activar las copias de seguridad automatizadas.

Paso 1: crear archivos sin formato con los datos que se van a cargar

Utilice un formato habitual, como valores separados por comas (CSV), para almacenar los datos que se deben cargar. Cada tabla debe tener su propio archivo. No se pueden combinar los datos de varias tablas en el mismo archivo. Dé a cada archivo el nombre de la tabla correspondiente. Puede elegir la extensión que desee para el nombre de los archivos. Por ejemplo, si el nombre de la tabla es sales, el nombre del archivo podría ser sales.csv o sales.txt, pero no sales_01.csv.

Siempre que sea posible, ordene los datos según la clave primaria de la tabla que se va a cargar. Esto mejorará drásticamente los tiempos de carga y minimizará los requisitos de almacenamiento en disco.

La velocidad y la eficiencia de este procedimiento dependen de que el tamaño de los archivos sea pequeño. Si el tamaño sin comprimir de algún archivo es mayor de 1 GiB, divídalo en varios archivos y cárguelos por separado.

En los sistemas de tipo Unix (incluido Linux), utilice el comando split. Por ejemplo, el siguiente comando divide el archivo sales.csv en varios archivos de menos de 1 GiB y los divide solo en los saltos de línea (-C 1024m). Los archivos nuevos se denominan sales.part_00, sales.part_01, y así sucesivamente.

split -C 1024m -d sales.csv sales.part_

Otros sistemas operativos disponen de utilidades similares.

Paso 2: detener las aplicaciones con acceso a la instancia de base de datos de destino

Antes de iniciar una carga grande, detenga toda la actividad de aplicaciones que acceden a la instancia de base de datos de destino que prevé cargar. Se recomienda esto en particular si otras sesiones modificarán las tablas que se cargan o las tablas a las que hacen referencia. Hacer esto reduce el riesgo de violaciones de restricciones que se producen durante la carga y mejoran el desempeño de carga. También permite restaurar la instancia de base de datos al estado inmediatamente anterior a la carga sin perder los cambios efectuados por los procesos no implicados en la carga.

Por supuesto, en ocasiones esto no será posible o no resultará práctico. Si no puede detener el acceso de las aplicaciones con acceso a la instancia de base de datos antes de la carga, tome las medidas oportunas para asegurar la disponibilidad e integridad de los datos. Los pasos específicos requeridos varían mucho en función de cada caso y de los requisitos del sitio.

Paso 3: crear una instantánea de base de datos

Si tiene previsto cargar los datos en una nueva instancia de base de datos que aún está vacía, puede omitir este paso. De lo contrario, la creación de una instantánea de base de datos de la instancia de base de datos permite restaurar la instancia de base de datos al estado inmediatamente anterior a la carga, si es necesario. Como se mencionó anteriormente, cuando se inicia una instantánea de base de datos, las operaciones de E/S de la instancia de base de datos se suspenden durante unos minutos mientras se crea una copia de seguridad de la base de datos.

En el siguiente ejemplo se utiliza el comando create-db-snapshot de la AWS CLI para crear una instantánea de base de datos de la instancia AcmeRDS y se otorga el identificador "preload" a la instantánea de base de datos.

Para Linux, macOS o Unix:

aws rds create-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Para Windows:

aws rds create-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

También puede utilizar la funcionalidad de restauración de instantáneas de bases de datos para crear instancias de bases de datos de prueba para simulacros o para deshacer cambios realizados durante la carga.

Tenga en cuenta que al restaurar una base de datos a partir de una instantánea de base de datos se crea una instancia nueva de base de datos que, como todas las instancias de base de datos, tiene un identificador y un punto de conexión únicos. Para restaurar la instancia de base de datos sin cambiar de punto de conexión, primero, elimine la instancia de base de datos para poder reutilizar el mismo punto de conexión.

Por ejemplo, para crear una instancia de base de datos para simulacros u otras pruebas, asigne a la instancia de base de datos su propio identificador. En el ejemplo, el identificador es AcmeRDS-2. El ejemplo se conecta a la instancia de base de datos mediante el punto de conexión asociado con AcmeRDS-2.

Para Linux, macOS o Unix:

aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS-2 \ --db-snapshot-identifier preload

Para Windows:

aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS-2 ^ --db-snapshot-identifier preload

Para reutilizar el punto de conexión existente, es necesario eliminar primero la instancia de base de datos y, luego, asignar el mismo identificador a la base de datos restaurada.

Para Linux, macOS o Unix:

aws rds delete-db-instance \ --db-instance-identifier AcmeRDS \ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

Para Windows:

aws rds delete-db-instance ^ --db-instance-identifier AcmeRDS ^ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

En el ejemplo anterior se toma una instantánea de base de datos final de la instancia de base de datos antes de eliminarla. Esto es opcional, pero recomendable.

Paso 4: consideración de la desactivación de las copias de seguridad automatizadas de Amazon RDS

aviso

No desactive las copias de seguridad automatizadas si necesita realizar una recuperación a un momento dado.

La desactivación de las copias de seguridad automatizadas elimina todas las copias de seguridad existentes, por lo que una vez efectuada no es posible la recuperación a un momento dado. La desactivación de las copias de seguridad automatizadas es una optimización del rendimiento y no es un requisito para las cargas de datos. Las instantáneas de base de datos manuales no se ven afectadas por la desactivación de las copias de seguridad automatizadas. Todas las instantáneas de base de datos manuales existentes seguirán estando disponibles para su restauración.

La desactivación de las copias de seguridad automatizadas reduce el tiempo de carga en aproximadamente un 25 % y reduce el espacio de almacenamiento necesario durante la carga. Si planea cargar los datos en una instancia de base de datos nueva que no contiene datos, desactivar las copias de seguridad es una forma sencilla de acelerar la carga y evitar utilizar el almacenamiento adicional que las copias de seguridad necesitan. Sin embargo, en algunos casos, es posible que tenga previsto cargar en una instancia de base de datos que ya contiene datos. Si es así, evalúe los beneficios de la desactivación de las copias de seguridad frente al impacto de perder la capacidad de realizar una recuperación a un momento dado.

Las instancias de base de datos tienen copias de seguridad automatizadas activadas de forma predeterminada (con un periodo de retención de un día). Para desactivar las copias de seguridad automatizadas, configure el periodo de retención de copia de seguridad en cero. Después de la carga, puede volver a activar las copias de seguridad mediante la configuración del periodo de retención de copia de seguridad en un valor distinto de cero. Para activar o desactivar las copias de seguridad, Amazon RDS apaga la instancia de base de datos y la reinicia para activar o desactivar el registro de MariaDB o MySQL.

Puede usar el comando AWS CLI de la modify-db-instance para establecer el valor cero como periodo de retención de copia de seguridad y aplicar el cambio inmediatamente. Al configurar cero como periodo de retención es necesario reiniciar la instancia de base de datos, por lo que debe esperar a que la operación se complete para poder continuar.

Para Linux, macOS o Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --apply-immediately \ --backup-retention-period 0

Para Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --apply-immediately ^ --backup-retention-period 0

Puede comprobar el estado de las instancias de base de datos con el comando AWS CLI de la describe-db-instances. En el siguiente ejemplo se muestra el estado de la instancia de base de datos de la instancia de base de datos AcmeRDS.

aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"

Cuando el estado de la instancia de base de datos es available, está listo para continuar.

Paso 5: cargar los datos

Use la utilidad mysqlimport para cargar los archivos sin formato en Amazon RDS. En el siguiente ejemplo se indica a mysqlimport que cargue todos los archivos con el nombre “sales” y una extensión que comience con “part_”. Se trata de una forma práctica de cargar todos los archivos creados con "split" en el ejemplo anterior.

Utilice la opción --compress para minimizar el tráfico en la red. La opción --fields-terminated-by=',' se utiliza para los archivos CSV, mientras que la opción --local especifica que los datos entrantes se encuentran en el cliente. Sin la opción --local, la instancia de base de datos de Amazon RDS busca los datos en el host de la base de datos, por lo que debe especificar siempre --local. Para la opción --host, especifique el punto de conexión de la instancia de base de datos de la instancia de base de datos de RDS for MySQL.

Para la versión 8.0.15 y posteriores de RDS for MySQL, ejecute la siguiente instrucción antes de utilizar la utilidad mysqlimport.

GRANT SESSION_VARIABLES_ADMIN ON *.* TO master_user;

Reemplace master_user por el nombre de usuario maestro para la instancia de base de datos.

Para Linux, macOS o Unix:

mysqlimport --local \ --compress \ --user=username \ --password \ --host=hostname \ --fields-terminated-by=',' Acme sales.part_*

Para Windows:

mysqlimport --local ^ --compress ^ --user=username ^ --password ^ --host=hostname ^ --fields-terminated-by="," Acme sales.part_*

Para la carga de volúmenes de datos muy grandes, obtenga instantáneas de base de datos adicionales entre las cargas de archivos y anote los archivos que ya se han cargado. Así, si surge un problema, podrá continuar fácilmente desde el momento de la última instantánea, evitando repetir cargas prolongadas.

Paso 6: activación de las copias de seguridad automatizadas de Amazon RDS

Una vez terminada la carga, active las copias de seguridad automatizadas de Amazon RDS estableciendo nuevamente el periodo de retención de copia de seguridad en el valor que había antes de la carga. Como se ha indicado anteriormente, Amazon RDS reinicia la instancia de base de datos, por lo que debe estar preparado para una breve interrupción del servicio.

El siguiente ejemplo utiliza el comando AWS CLI de la modify-db-instance para activar las copias de seguridad automatizadas para la instancia de base de datos AcmeRDS y establecer el periodo de retención en un día.

Para Linux, macOS o Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --backup-retention-period 1 \ --apply-immediately

Para Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --backup-retention-period 1 ^ --apply-immediately