MySQL - Dump de banco de dados sem a estrutura de tabelas

É com certeza uma das práticas mais comuns entre os profissionais que trabalham com banco de dados o backup ou restore de dados. Para isso é muito comum o uso do mysqldump. Em sua configuração padrão o mysqldump, além de copiar os dados da banco também copia toda a estrutura de tabelas e índices.

 $ mysqldump -uusername -psenha database > /diretorio/backup.sql  

Porém existem algumas situaçães em que o Dump de uma tabela ou banco não serve apenas para backup. Uma delas, por exemplo, é quando precisamos recriar algum índice novo para a tabela, a fim de melhorar o desempenho.

Quem já trabalhou com índices saberá de antemão que lidar com eles em tabelas com milhões de registros, atualizando, trocando, deletando ou criando é um verdadeiro inferno, já que muitas vezes o processo leva horas, quando não dias.

Eu mesmo, certa vez, tive que deletar um indice de uma tabela com alguns milhões de registros e me arrependi brutalmente pois levaram 'apenas' 8 horas para o processo ser completado.

Um método para agilizar este processo é utilizando Dumps das tabelas.

Sobre a técnica do Dump


A técnica consiste em você fazer um Dump de sua tabela original porém sem a estruruta da mesma, ou seja, sem o 'create table' e seus indices antigos. O que você terá será um arquivo de Dump basicamente com os dados e os campos em que devem ser inseridos (uma gigantesca lista de INSERTS apenas)

Depois de nosso arquivo com os dados estar pronto truncamos a tabela original, o que limpará os dados antigos.

Em seguida deletamos, mudamos ou criamos os novos indices. Esta atualização será instantânea pois as tabelas não possuem dados e o banco de dados não terá de preocupar-se em atualizar as informações dos indices, criar tabelas temporárias e etc.

Depois de criada a nova estrutura dos indices inserimos de volta os dados 'Dumpados'. Lembre-se que; como exportamos a tabela sem as estruturas ele conterá apenas os dados brutos e ao ser inserido novamente nas tabelas a nova indexação será criada conforme os dados entram.

Esta forma é muito, muito mais rápida e eficiente de recriar índices.

Fazendo o processo na prática


Abaixo listamos o processo através de comandos:

Fazer o Dump sem a estrutura de tabelas e indices, além de preservar os caracteres latinos (sintaxe Linux)

$ mysqldump -uusername -psenha --no-create-info --default-character-set=latin1 database > /diretorio/backup.sql


Reimportar os dados (sintaxe Linux)

$ mysql -uusername -psenha --default-character-set=latin1 database < /diretorio/backup.sql


Outros métodos


Não existe apenas este método para fazer a atualização de indices. Outro método que também pode ser usando é exportar o conteúdo em formato .csv, por exemplo, e reimportar os dados como se fosse de uma planilha.

A ideia é sempre a mesma: ao alterar índices faça isso com sua tabela vazia!

Espero que utilizem bastante o método
Abraço

Comentários

Postagens mais visitadas deste blog

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

MySQL - Clonando tabelas na linha de comando

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()