Reduzir o tempo de migração física para o Amazon Aurora MySQL - Amazon Aurora

Reduzir o tempo de migração física para o Amazon Aurora MySQL

Você pode fazer as modificações a seguir no banco de dados para acelerar o processo de migração do banco de dados para o Amazon Aurora MySQL.

Importante

Realize essas atualizações em uma cópia do banco de dados de produção, e não no banco de dados de produção em si. Em seguida, você poderá fazer backup da cópia e restaurá-la no cluster de banco de dados do Aurora MySQL para evitar interrupções no serviço no banco de dados de produção.

Tipos de tabela não compatíveis

O Aurora MySQL comporta somente o mecanismo InnoDB para tabelas de banco de dados. Se houver tabelas MyISAM no banco de dados, elas deverão ser convertidas antes da migração para o Aurora MySQL. O processo de conversão exige espaço adicional para a conversão de MyISAM para InnoDB durante o procedimento de migração.

Para reduzir as chances de ficar sem espaço ou para agilizar o processo de migração, converta todas as tabelas MyISAM para tabelas InnoDB antes de migrá-las. O tamanho da tabela InnoDB resultante é equivalente ao tamanho exigido pelo Aurora MySQL para aquela tabela. Para converter uma tabela MyISAM para InnoDB, execute o seguinte comando:

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

O Aurora MySQL não comporta tabelas ou páginas compactadas (isto é, tabelas criadas com ROW_FORMAT=COMPRESSED ou COMPRESSION = {"zlib"|"lz4"}).

Para reduzir as chances de ficar sem espaço ou para agilizar o processo de migração, expanda suas tabelas compactadas definindo ROW_FORMAT como DEFAULT, COMPACT, DYNAMIC ou REDUNDANT. Para páginas compactadas, defina COMPRESSION="none".

Para ter mais informações, consulte InnoDB row formats e InnoDB table and page compression na documentação do MySQL.

Use o seguinte script SQL na sua instância de banco de dados MySQL existente para listar as tabelas no seu banco de dados que são MyISAM ou compactadas.

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

Contas de usuário com privilégios não compatíveis

As contas de usuário com privilégios não compatíveis com o Aurora MySQL são importadas sem os privilégios incompatíveis. Para ver a lista de privilégios compatíveis, consulte Modelo de privilégios baseados em funções.

É possível executar a consulta SQL a seguir em seu banco de dados de origem para listar as contas de usuário com privilégios incompatíveis.

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

Privilégios dinâmicos no Aurora MySQL versão 3

Os privilégios dinâmicos não são importados. O Aurora MySQL versão 3 comporta os seguintes privilégios dinâmicos.

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

O script de exemplo a seguir concede os privilégios dinâmicos compatíveis com as contas de usuário no cluster de banco de dados do 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 armazenados com ‘rdsadmin'@'localhost’ como definidor

Funções, procedimentos, visualizações, eventos e acionadores com 'rdsadmin'@'localhost' como definidor não são importados.

Você pode usar o script SQL a seguir, no banco de dados MySQL de origem, a fim de listar os objetos armazenados que têm o definidor incompatível.

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