

# Reduzir o tempo de migração física para o Amazon Aurora MySQL
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks"></a>

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
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Tables"></a>

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](https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html) e [InnoDB table and page compression](https://dev.mysql.com/doc/refman/8.0/en/innodb-compression.html) 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
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

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](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model).

É 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
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Dynamic"></a>

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
<a name="AuroraMySQL.Migrating.ExtMySQL.Prechecks.Objects"></a>

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