Réduction du délai de migration physique vers Amazon Aurora MySQL - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Réduction du délai de migration physique vers Amazon Aurora MySQL

Vous pouvez apporter les modifications de base de données suivantes pour accélérer le processus de migration d'une base de données vers Amazon Aurora MySQL.

Important

Veillez à effectuer ces mises à jour sur une copie d'une base de données de production, plutôt que sur une base de données de production. Vous pouvez ensuite sauvegarder la copie et la restaurer sur votre cluster de bases de données Aurora MySQL pour éviter toute interruption de service sur votre base de données de production.

Types de table non pris en charge

Aurora MySQL prend uniquement en charge le moteur InnoDB pour les tables de base de données. Si vous avez des tables MyISAM dans votre base de données, elles doivent être converties avant la migration vers Aurora MySQL. Le processus de conversion nécessite un espace supplémentaire pour la conversion de MyISAM en InnoDB pendant la procédure de migration.

Pour réduire le risque d'un espace insuffisant ou pour accélérer le processus de migration, convertissez toutes vos tables MyISAM en tables InnoDB avant de les migrer. La taille de la table InnoDB obtenue est équivalente à celle requise par Aurora MySQL pour cette table. Pour convertir une table MyISAM en InnoDB, exécutez la commande suivante :

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

Aurora MySQL ne prend pas en charge les tables ou les pages compressées, c'est-à-dire les tables créées avec ROW_FORMAT=COMPRESSED ouCOMPRESSION = {"zlib"|"lz4"}.

Pour réduire le risque d'un espace insuffisant ou pour accélérer le processus de migration, développez vos tables compressées en définissant ROW_FORMAT sur DEFAULT, COMPACT, DYNAMIC ou REDUNDANT. Pour les pages compressées, définissezCOMPRESSION="none".

Pour plus d'informations, consultez les sections Formats de ligne InnoDB et compression de tables et de pages InnoDB dans la documentation MySQL.

Vous pouvez utiliser le script SQL suivant sur votre instance de base de données MySQL existante pour afficher les tables de votre base de données qui sont des tables MyISAM ou des tables compressées.

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

Comptes d'utilisateur avec des privilèges non pris en charge

Les comptes d'utilisateur dotés de privilèges non pris en charge par Aurora MySQL sont importés sans les privilèges non pris en charge. Pour obtenir la liste des privilèges pris en charge, consultez Modèle de privilège basé sur les rôles.

Vous pouvez exécuter la requête SQL suivante sur votre base de données source pour répertorier les comptes d'utilisateur dotés de privilèges non pris en charge.

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

Privilèges dynamiques dans Aurora MySQL version 3

Les privilèges dynamiques ne sont pas importés. Aurora MySQL version 3 prend en charge les privilèges dynamiques suivants.

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

L'exemple de script suivant accorde les privilèges dynamiques pris en charge aux comptes d'utilisateur dans le cluster de bases de données 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

Objets stockés avec 'rdsadmin'@'localhost' comme définisseur

Les fonctions, les procédures, les vues, les événements et les déclencheurs avec 'rdsadmin'@'localhost' comme définisseur ne sont pas importés.

Vous pouvez utiliser le script SQL suivant sur votre base de données MySQL source pour répertorier les objets stockés qui possèdent le définisseur non pris en charge.

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