Você sabe como exportar uma ou mais tabelas InnoDB de um database para outro ou de um servidor para outro apenas movendo os arquivos de dados?

Como sabemos, com tabelas InnoDB não podemos fazer igual fazemos com tabelas MyISAM, onde basta copiarmos os 3 arquivos(MYD, MYI e FRM) da tabela MyISAM e enviar para onde quisermos. Mas tem um recurso nativo e que permite fazer algo bem semelhante e pode ajudar muito.

Assista o video e veja como isso funciona.

 

 Pré-requisitos

  1. MySQL 5.6.6 ou superior
  2. InnoDB File Per table ativado

Como fazer

Independente se deseja enviar para um database no mesmo servidor ou para outro servidor os procedimentos são os mesmos.

Os exemplo abaixo são os mesmos mostrados no video acima, então para um melhor entendimento das instruções abaixo assista o video .

Criar uma tabela com a mesma estrutura no database que irá receber os dados.

(seguindo os mesmos passos do video)

Servidor Origem:

Copy to Clipboard

 

Servidor destino:

Copy to Clipboard

 

Descartar o tablespace da tabela que acabou de ser criada no servidor de destino.

Ao descartar o tablespace o MySQL vai excluir o arquivo .ibd que contém os dados e índices da tabela e preparar para que possa ser feita uma importação de tablespace na sequência.

Muito cuidado para executar esse comando no servidor de destino e não no servidor de origem, se executar na origem vai apagar todos os dados.

Copy to Clipboard

 

Preparar o MySQL para exportar a tabela, e fazer o envio dos arquivos e liberando a tabela no servidor de origem.

Servidor de Origem:
Preparar o MySQL para permitir que uma tabela seja exportada.

Copy to Clipboard

 

Esse comando fez com que a tabela c receba um lock e também gera um arquivo chamado c.cfg que deverá ser enviado para o servidor de destino junto com o c.ibd.
O arquivo c.cfg é um arquivo que será usado no servidor de destino para validar a estrutura da tabela que já criamos com a estrutura da tabela do servidor de origem, assim garantindo a compatibilidade de estruturas e podendo concluir a importação com sucesso.

Agora basta enviar os arquivo c.cfg e c.ibd para o servidor de destino.

Copy to Clipboard

 

Agora precisamos liberar o lock da tabela liberando ela para ser usada novamente.

Copy to Clipboard

 

Ajustando as permissões dos arquivos enviados no servidor de destino  

Agora que  os arquivos cfg e ibd já estão no servidor de destino, é necessário verificar se eles estão com as permissões corretas. O usuário e o grupo dos arquivos no linux devem ser o mysql.

Copy to Clipboard

 

Importando o tablespace no servidor destino

Tudo pronto, arquivos enviados do servidor de origem para o servidor de destino, permissões ajustadas, agora só falta importar o tablespace novamente. Esse procedimento de importar o tablespace basicamente faz o link entre o arquivo de dados(c.ibd) com a tabela na engine InnoDB do servidor.

Copy to Clipboard

 

Pronto, a tabela foi copiada de um servidor MySQL em funcionamento e enviada para outro.
Claro que tem situações que é mais simples fazer isso com o mysqldump, mas como disse no video, se for uma tabela grande e o tempo de backup, enviar o arquivo e restore será demorado, esse se torna um procedimento bem útil.

Links de referência