Converter Catálogo do Bacula de MySQL para PostgreSQL

O MySQL/MariaDB*¹ é um banco de dados muito bom, porém na medida que os backups vão aumentando, ele começa a ficar lento, demora mais para efetuar os backups, etc.
(¹ Apesar de o MariaDB ser muito semelhante ao MySQL ele não é 100% compatível e não é recomendado, pois tem um desempenho pior que do MySQL em algumas situações)

Por recomendações da própria Bacula System e do próprio criador do Bacula (Kern Sibbald), o banco de dados PostgreSQL é mais indicado para se utilizar com o Bacula, pois é um banco mais robusto e seguro.

Como o Bacula suporta ambos os banco de dados, é mais fácil fazer este tipo de migração, pois é possível migrar apenas os dados e não as criações de tabelas, índices, funções, etc.

ATENÇÃO: Sempre por precaução, faça um backup completo do banco de dados antes de continuar com este processo!

Este tutorial foi baseado no manual do Bacula
https://www.bacula.org/9.0.x-manuals/en/main/Installing_Configuring_Post.html#SECTION004350000000000000000

  • – Este script foi testado usando o MySQL 5.6, 5.7 para um PostgreSQL 9.4, 9.6 e Bacula 9.0.8, Bacula 9.2.2
  • – Este script de migração foi simulado em um ambiente usando um Bacula compilado com o MySQL.
  • – Os arquivos de configuração foram utilizados os mesmos.
  • – Os daemons do Bacula foram parados totalmente e o Bacula foi recompilado, porém agora com a opção –with-postgresql ao invés de –with-mysql.
  • – Pode-se efetuar todos os passos de uma instalação fresca do Bacula com PostgreSQL
  • – Após o Bacula já estar configurado e rodando certinho com o Banco PostgreSQL, parar todos os daemons novamente e executar os scripts de manipulação do catálogo, porém agora para deixar a base PostgreSQL totalmente fresca:
    ./drop_postgresql_database
    ./create_postgresql_database
    ./make_postgresql_tables
    ./grant_postgresql_privileges

Passo 1

Criar um diretório vazio em /usr/src/ e efetuar o download dos scripts de migração:

mkdir /usr/src/bacula_migration
cd /usr/src/bacula_migration
wget -c https://raw.githubusercontent.com/wanderleihuttel/bacula-utils/master/convert_mysql_to_postgresql/mysql_to_postresql.sh
wget -c https://raw.githubusercontent.com/wanderleihuttel/bacula-utils/master/convert_mysql_to_postgresql/import_postgresql.sh
chmod a+x mysql_to_postresql.sh
chmod a+x import_postgresql.sh

Passo 2

Certifique-se de que o MySQL/MariaDB esteja rodando e execute o script “mysql_to_postresql.sh”.
Este script vai solicitar as credenciais do MySQL/MariaDB e vai gerar um dump de cada tabela individualmente com a extensão .sql e também um arquivo chamado “RowCountMySQL.log” que vai conter o total de registros contidos em cada tabela. Este arquivo será utilizado mais na frente.

Passo 3

Configure os parâmetros no script import_postgresql.sh “db_user” e “db_name” ou mantenha os padrões

Passo 4

Crie um arquivo chamdo .pgpass em ‘/root/’ com as credenciais do usuário do Bacula no PostgreSQL e com permissão 600.

touch /root/.pgpass
chmod 600 /root/.pgpass

# Exemplo de arquivo (use suas credenciais)
# hostname:port:database:username:password
localhost:5432:bacula:bacula:your_password

Se a configuração foi bem sucedida é possível acessar a interface do PostgreSQL com o usuário configurado anteriormente e sem precisar da senha:

psql -U bacula bacula
psql (9.6.10)
Digite "help" para ajuda.
bacula=> # Digite q para sair

Passo 5

Execute o script ‘import_postgresql.sh’ para importar os dumps do MySQL para o PostgreSQL.
Se tudo ocorrer bem, você pode comparar os arquivos ‘RowCountMySQL.log’ e ‘RowCountPg.log’. Se o número de registros de cada tabela no MySQL e no PostgreSQL for o mesmo, você pode se orgulhar, a migração a principio foi concluída com sucesso!

Passo 6

Verifique os arquivos com extensão ‘.log’ para checar se não ocorreu nenhum erro
Se o conteúdo desses arquivos de log for semelhante a “psql: File.sql: 2: WARNING: não há transação em andamento”. A migração foi concluída com sucesso, se não, é necessário analisar cada arquivo que corresponde a cada tabela e tentar descobrir o motivo dos erros.

Solução de problemas

Um dos problemas mais comuns que podem acontecer é de não importar alguns registros da tabela ‘Log’ por causa de codificação errada, proveniente de erros de backup de clientes Windows. A solução mais fácil e prática é editar manualmente os registros (no lado do MySQL), com comandos de UPDATE para substituir esses caracteres errados, gerar o dump novamente e importar somente esta tabela.
Ou então mais recomendado ainda, após corrigir todos os erros, zerar novamente o catálogo PostgreSQL e repetir todos os passos, desde o Dump do MySQL/MariaDB até a importação no PostgreSQL.

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe uma resposta