Migrando bancos de dados com ydbmigrate

Desenvolver um aplicativo implica em ter um bom banco de dados, mas responder rapidamente a uma migração estrutural é mais um pesadelo do que uma noite bem dormida.

Dentre as ferramentas que o YeAPF dispõe se encontra o ydbmigrate.

Esta ferramenta nos permite exportar e importar dados de varias fontes dentro do universo de banco de dados reconhecidos pelo YeAPF, ou seja: Firebird/Interbase, MySQL e PostgreSQL.

A migração de dados de um banco de dados para outro (de diferente ou mesma natureza) é feita sempre usando modelos intermediários.  Por exemplo tabela firebird -> arquivo csv -> tabela mysql

Um exemplo simples disso é feito nos seguintes dois passos (supondo que o banco original contêm uma tabela chamada minhaTabela com dados e o banco de dados copia está vazio)

Exportando

ydbmigrate --db localhost:/bd/original.fdb --user SYSDBA --pass MASTERKEY --type firebird --table minhaTabela --export minhaTabela

Isso vai produzir um arquivo chamado minhaTabela.csv com as colunas e os dados da tabela original.  De mais está dizer que essa tabela pode ser aberta com uma planilha como LibreOffice.

Importando

ydbmigrate --db localhost:destino --user root --pass minhaSenha --type mysql --table minhaTabela --import minhaTabela

Pronto, com este segundo passo, agora existe uma tabela chamada minhaTabela no banco destino contendo a estrutura e os dados que haviam no arquivo minhaTabela.csv.

Repare, porém, que a estrutura que o ydbmigrate criou no banco destino, não é obrigatoriamente idêntica à original.  Isso é assim porque na importação o ydbmigrate calcula a menor estrutura necessária para conter os dados repassados.  Então, caso queira enxugar a sua estrutura de dados, ydbmigrate já resolve boa parte do serviço.

Mantendo a estrutura

Digamos que você quer conservar a estrutura original. O ydbmigrate permite criar um script sql contendo as instruções de criação da tabela mas, não se atendo a estruturas que são particulares a cada banco.

Mesmo este trabalho estando em andamento, já é possível migrar boa parte das estruturas das tabelas usando o ydbmigrate.

ydbmigrate --db localhost:/bd/original.fdb --user SYSDBA --pass MASTERKEY --type firebird --table minhaTabela --table-structure-sql > minhaTabela.sql

Uma vez feito isto, você terá um arquivo minhaTabela.sql na pasta local que pode ser utilizado para criar a estrutura no banco destino usando a ferramenta da sua preferência.

Finalmente, usamos o ydbmigrate para importar a tabela sem mexer na estrutura

ydbmigrate --db localhost:destino --user root --pass minhaSenha --type mysql --table minhaTabela --import minhaTabela --dontModifyStructure

Uma olhada nos parâmetros que o ydbmigrate nos oferece, nos permite ver que há outras coisas que podemos fazer como limpar a tabela antes de importar (–clean) ou não importar dados (–dontImportData) ou não eliminar as colunas vazias (–dontDeleteEmptyFields) ou recriar a tabela com o algoritmo do ydbmigrate mesmo que a tabela já exista (–forceCreateTable)

Bom, é por essas e por outras que usamos ydbmigrate para migrar tabelas