Desenvolvimento e bases de dados
Converter uma base de dados MyISAM para InnoDB, mudando o motor de armazenamento
Uma aplicação pode exigir a conversão de tabelas MyISAM para InnoDB. Não substitua texto globalmente dentro do dump nem esvazie a base de dados de produção: a alteração tem de ser testada numa cópia independente, mantendo o original como reversão.
1. Criar e verificar uma cópia protegida
Trabalhe a partir de uma pasta privada fora de public_html, com um nome de dump novo. Pare temporariamente as escritas e gere um dump. A opção -p pede a palavra-passe sem a incluir no comando:
umask 077 mysqldump --routines --triggers -u USUARIO_MYSQL -p BASE_DE_DATOS > base-antes-innodb.sql && test -s base-antes-innodb.sql && sha256sum base-antes-innodb.sql > base-antes-innodb.sql.sha256 && chmod 400 base-antes-innodb.sql base-antes-innodb.sql.sha256 && sha256sum -c base-antes-innodb.sql.sha256
Se o mysqldump devolver um erro, não continue nem considere válido o ficheiro parcial. A exportação de rotinas exige permissões; se falhar, reveja que objetos a aplicação precisa antes de os omitir. Os eventos, se existirem, também têm de ser inventariados e exportados com as opções e permissões adequadas. O checksum deteta alterações posteriores no ficheiro, mas não demonstra que a cópia está completa. As permissões só de leitura também não a tornam imutável.
Descarregue o dump e o seu checksum para outro armazenamento. Não altere estes ficheiros.
2. Restaurar e rever um clone
Crie uma base de dados e um utilizador novos, restaure a cópia e configure aí um clone da aplicação. Desative os seus emails, cobranças, webhooks e tarefas automáticas para não duplicar ações de produção:
mysql -u USUARIO_NUEVO -p BASE_NUEVA < base-antes-innodb.sql
Pré-visualize as tabelas MyISAM e o seu tamanho:
SELECT TABLE_NAME, ENGINE, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'BASE_NUEVA' AND ENGINE = 'MyISAM';
Reveja as chaves primárias, os índices (incluindo FULLTEXT), os tipos de linha e a compatibilidade da aplicação com a mudança de motor. Confirme o espaço livre tanto para o clone como para reconstruir as suas tabelas. A conversão pode bloquear tabelas e precisar de espaço adicional.
3. Converter apenas as tabelas revistas
Gere uma lista de instruções exatas, verifique-a e execute cada uma apenas no clone:
SELECT CONCAT('ALTER TABLE `', REPLACE(TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(TABLE_NAME, '`', '``'), '` ENGINE=InnoDB;') AS sentencia_a_revisar FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'BASE_NUEVA' AND ENGINE = 'MyISAM';
Não use uma substituição global no .sql: poderia alterar dados de utilizadores, comentários ou configurações que contenham a palavra MyISAM.
4. Validar e fazer a mudança
Use COUNT(*) para contagens exatas: TABLE_ROWS pode ser uma estimativa, sobretudo depois de converter para InnoDB. Compare o esquema, os índices e a contagem de linhas de todas as tabelas entre a base de dados original e o clone. Teste o acesso, as pesquisas, a escrita, as tarefas agendadas e as operações críticas da aplicação.
Só depois de validar o clone, pare novamente as escritas, sincronize as alterações finais, se for o caso, e altere as credenciais da aplicação para usar BASE_NUEVA. Mantenha a base de dados original intacta e sem escritas durante o período de observação.
Reversão
Se alguma verificação posterior falhar, pare as escritas. Antes de repor as credenciais anteriores, identifique e guarde as operações recebidas na base de dados nova; voltar sem as conciliar perderia essas alterações. Depois de resolver esse ponto, volte à base de dados original. Mantenha tanto essa base de dados como o dump verificado até confirmar que a conversão está estável.
Se não puder dispor de um clone ou calcular o espaço necessário, contacte o suporte antes de converter as tabelas.
Também lhe pode ser útil
- Clonar uma base de dados Duplique uma base de dados MySQL criando primeiro o destino e as suas permissões no cPanel e copiand...
- Consultar a versão do MySQL e verificar a compatibilidade Identifique a versão real do servidor MySQL que a sua aplicação utiliza, reveja a compatibilidade e...
- Criar uma base de dados e o respetivo utilizador com o assistente do cPanel Crie uma base de dados MySQL, o seu utilizador e a associação de permissões com o assistente do cPan...
- Ligação remota e segura ao servidor MySQL Proteja uma ligação MySQL remota através de um túnel SSH e configure em separado as credenciais SSH...
Algo não bate certo ou mudou? Diga-nos e revemos.