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: PortuguêsEnglish (Inglês)Español (Espanhol)