Reducir el tiempo de la migración física a Amazon Aurora MySQL - Amazon Aurora

Reducir el tiempo de la migración física a Amazon Aurora MySQL

Puede realizar las siguientes modificaciones en la base de datos de para acelerar el proceso de migrar una base de datos a Amazon Aurora MySQL.

importante

Asegúrese de realizar las actualizaciones en una copia de la base de datos de producción, en lugar de en una base de datos de producción. A continuación, puede hacer una copia de seguridad de la copia y restaurarla en su clúster de base de datos de Aurora MySQL para evitar interrupciones en el servicio en la base de datos de producción.

Tipos de tablas no admitidas

Aurora MySQL solo admite el motor InnoDB para tablas de bases de datos. Si hay tablas MyISAM en la base de datos, tendrá que convertir esas tables antes de migrar a Aurora MySQL. El proceso de conversión requiere más espacio para la conversión de MyISAM a InnoDB durante el procedimiento de migración.

Para reducir el riesgo de quedarse sin espacio o para acelerar el proceso de migración, convierta todas sus tablas MyISAM en tablas InnoDB antes de migrarlas. El tamaño de la tabla InnoDB resultante equivale al tamaño requerido por Aurora MySQL para esa tabla. Para convertir una tabla MyISAM a InnoDB, ejecute el siguiente comando:

ALTER TABLE schema.table_name engine=innodb, algorithm=copy;

Aurora MySQL no admite tablas comprimidas, es decir, tablas creadas con ROW_FORMAT=COMPRESSED o COMPRESSION = {"zlib"|"lz4"}.

Para reducir el riesgo de quedarse sin espacio o para acelerar el proceso de migración, amplíe las tablas comprimidas mediante la configuración de ROW_FORMAT DEFAULT, COMPACT, DYNAMIC o REDUNDANT. Para páginas comprimidas, configure COMPRESSION="none".

Para obtener más información, consulte Formatos de fila de InnoDB y Compresión de tablas y páginas en InnoDB en la documentación de MySQL.

Puede utilizar el siguiente script de SQL en su instancia de base de datos MySQL para obtener una lista de las tablas MyISAM o comprimidas de su base de datos.

-- This script examines a MySQL database for conditions that block -- migrating the database into Aurora MySQL. -- It must be run from an account that has read permission for the -- INFORMATION_SCHEMA database. -- Verify that this is a supported version of MySQL. select msg as `==> Checking current version of MySQL.` from ( select 'This script should be run on MySQL version 5.6 or higher. ' + 'Earlier versions are not supported.' as msg, cast(substring_index(version(), '.', 1) as unsigned) * 100 + cast(substring_index(substring_index(version(), '.', 2), '.', -1) as unsigned) as major_minor ) as T where major_minor <> 506; -- List MyISAM and compressed tables. Include the table size. select concat(TABLE_SCHEMA, '.', TABLE_NAME) as `==> MyISAM or Compressed Tables`, round(((data_length + index_length) / 1024 / 1024), 2) "Approx size (MB)" from INFORMATION_SCHEMA.TABLES where ENGINE <> 'InnoDB' and ( -- User tables TABLE_SCHEMA not in ('mysql', 'performance_schema', 'information_schema') or -- Non-standard system tables ( TABLE_SCHEMA = 'mysql' and TABLE_NAME not in ( 'columns_priv', 'db', 'event', 'func', 'general_log', 'help_category', 'help_keyword', 'help_relation', 'help_topic', 'host', 'ndb_binlog_index', 'plugin', 'proc', 'procs_priv', 'proxies_priv', 'servers', 'slow_log', 'tables_priv', 'time_zone', 'time_zone_leap_second', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'user' ) ) ) or ( -- Compressed tables ROW_FORMAT = 'Compressed' );

Cuentas de usuario con privilegios no admitidos

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

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';

Privilegios dinámicos de la versión 3 de Aurora MySQL

Los privilegios dinámicos no se importan. La versión 3 de Aurora MySQL admite los siguientes privilegios dinámicos.

'APPLICATION_PASSWORD_ADMIN', 'CONNECTION_ADMIN', 'REPLICATION_APPLIER', 'ROLE_ADMIN', 'SESSION_VARIABLES_ADMIN', 'SET_USER_ID', 'XA_RECOVER_ADMIN'

El siguiente script de ejemplo concede los privilegios dinámicos admitidos a las cuentas de usuario del clúster de base de datos de Aurora MySQL.

-- This script finds the user accounts that have Aurora MySQL supported dynamic privileges -- and grants them to corresponding user accounts in the Aurora MySQL DB cluster. /home/ec2-user/opt/mysql/8.0.26/bin/mysql -uusername -pxxxxx -P8026 -h127.0.0.1 -BNe "SELECT CONCAT('GRANT ', GRANTS, ' ON *.* TO ', GRANTEE ,';') AS grant_statement FROM (select GRANTEE, group_concat(privilege_type) AS GRANTS FROM information_schema.user_privileges WHERE privilege_type IN ( 'APPLICATION_PASSWORD_ADMIN', 'CONNECTION_ADMIN', 'REPLICATION_APPLIER', 'ROLE_ADMIN', 'SESSION_VARIABLES_ADMIN', 'SET_USER_ID', 'XA_RECOVER_ADMIN') AND GRANTEE NOT IN (\"'mysql.session'@'localhost'\",\"'mysql.infoschema'@'localhost'\",\"'mysql.sys'@'localhost'\") GROUP BY GRANTEE) AS PRIVGRANTS; " | /home/ec2-user/opt/mysql/8.0.26/bin/mysql -u master_username -p master_password -h DB_cluster_endpoint

Objetos almacenados con 'rdsadmin'@'localhost' como definidor

Las funciones, procedimientos, vistas, eventos y activadores con 'rdsadmin'@'localhost' como definidor no se importan.

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';