Plugin MySQL Bacula Enterprise – Guia Rápido

Este guia rápido apresenta técnicas e estratégias para backup do MySQL e do MariaDB com o MySQL Bacula Enterprise Plugin.

Todas as versões do MySQL 4.0.xe superior são suportadas, e também os equivalentes do MariaDB devem ser.

O plug-in é capaz de realizar backups incrementais e diferenciais dos bancos de dados e também salvará os arquivos de log gerados durante o backup para fins de recuperação do PITR.

O plug-in suporta as técnicas de backup fluxo de Dump e fluxo Binário.

O fluxo Dump permite a edição e restauração de apenas alguns objetos de banco de dados, como tabelas e esquemas.

O fluxo Binário não permite a restauração de um único objeto granular, mas as operações de backup e restauração são mais rápidas.

Instalação

O plugin MySQL está disponível como um pacote Bacula Enterprise para todas as plataformas suportadas.

Você precisa instalar este plugin no cliente onde seu servidor MySQL reside. O pacote do cliente Bacula, geralmente “bacula-enterprise-client” também deve ser instalado, ferramentas como mysqldump e mysql devem estar disponíveis.

Ao usar o modo Binário, você precisa instalar a ferramenta xtrabackup e certificar-se de que os pacotes innobackupex e xtrabackup estejam instalados corretamente e disponíveis no PATH. RPMs e Debs estão disponíveis no site da Percona – https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/apt_repo.html.

rpm -ivh bacula-enterprise-mysql-plugin-8.10.1-1.el7.x86_64.rpm

Configuração MySQL

Para usar o recurso de Recuperação Point In Time do MySQL, o recurso log_bin deve estar ativado, o que normalmente já acontece por padrão (a variável de sistema log_bin está definida como ON).

Caso não esteja, pode habilitar o caminho para o arquivo de log em /etc/my.cnf. Por exemplo, log_bin=/var/lib/mysql/mysql.index.

Outra exceção é se você usar o mysqld para inicializar o diretório de dados manualmente invocando-o com a opção –initialize ou –initialize-insecure, quando o log binário estiver desabilitado por padrão. É possível habilitar o log binário, nestes casos, especificando a opção –log-bin para o comando de inicialização do MySQL.

O procedimento pode diferir entre as versões principais do MySQL, portanto, aconselhamos que você leia a documentação correspondente à sua versão.

Configuração do FileSet e Plugin no Método Dump

Conforme mostrado na Figura 1, a criação do FileSet pode ser executada usando o bweb (Edit Plugin – com todas as opções disponíveis).

Plugin MySQL Bacula Enterprise – Guia Rápido 1

Figura 1. Tela de Configuração do Fileset do bweb, Edição de Plugin do MySQL no Modo Dump

Ou texto, como no modelo de configuração mínimo a seguir para todos os backups de bancos de dados encontrados:

FileSet {
  Name = FS_mysql_dump
  Include {
    Options {
      Signature = MD5
    }
  Plugin = mysql
  }
}

É possível usar o nome do banco de dados com um padrão de sequência ou usar várias linhas para selecionar apenas alguns bancos de dados para backup. Por exemplo:

Plugin = "mysql: database=hfaria"
Plugin = "mysql: database=guru"

Neste último exemplo, um usuário específico do MySQL é usado para acessar o MySQL, e uma tabela é ignorada a partir do backup:

Plugin = "mysql: user=hfaria dump_opt="--ignore-table=db_name.tbl_name""

Conforme listado na Tabela 1, estas são todas as opções suportadas pelo método Dump:

Option Default Description Exemplo
dump_opt Esta string será passada para o comando mysqldump dump_opt=”-X”
unix_user mysql Usuário do sistema operacional a usar para comandos do MySQL user=hfaria
service Nome do servidor MySQL service=main
mycnf_dir Caminho onde o arquivo my.cnf do MySQL está armazenado my_cnf=/tmp
use_sudo Use sudo em vez de executar comandos do MySQL (quando não é root) use_sudo
database Será feito backup nos bancos de dados correspondentes a essa string database=prod*
all_databases Gerará um único despejo de todos os bancos de dados
bin_dir Localização dos binários do MySQL bin_dir=/usr/bin/
user root Super usuário do MySQL user=hfaria
password Senha do usuário MySQL password=xxx
logbin_dir diretório mysqld log_bin
encoding utf8 Conjunto de caracteres usado para o Dump dos dados encoding=utf8

Tabela 1. Opções do Método de Dump de Plug-in do MySQL

Configuração do FileSet e Plugin no Método Binário

Conforme mostrado na Figura 2, a criação do FileSet pode ser executada usando o bweb (Edit Plugin – com todas as opções disponíveis).

Plugin MySQL Bacula Enterprise – Guia Rápido 2

Figura 2. Tela de Configuração do Fileset do bweb, Edição de Plugin do MySQL no Modo Binário

Ou texto, como no modelo de configuração mínimo a seguir para todos os backups de bancos de dados encontrados:

FileSet {
  Name = FS_mysql_dump
  Include {
    Options {
      Signature = MD5
    }
  Plugin = "mysql: mode=binary"
}

Conforme exibido na Tabela 2, o plug-in suporta as seguintes opções no modo binário:

Option Default Description Exemplo
mode=binary dump Necessário para habilitar o método Binário
unix_user mysql Usuário MySQL do sistema operacional unix_user=mysql
service main Nome do serviço MySQL service=main
user root Usuário do MySQL user=hfaria
password Senha do usuário MySQL password=xxx
bin_dir Localização dos binários do MySQL bin_dir=/usr/bin
bin_format xbstream Formato do Binário (tar ou xbstream) bin_format=tar
config_file /etc/mysql/my.cnf Caminho para o arquivo de configuração my.cnf do mysqld /etc/mysql/my.cnf

Tabela 2. Opções do Método Binário do Plug-in do MySQL

Opções de Conexão Situacionais do MySQL

Se a sua instalação do MySQL está usando opções específicas de conexão como conexão TCP, porta não padrão, ou para evitar que o Bacula tenha a senha de usuário do banco de dados nas opções de conexão do plug-in, é possível criar um arquivo .my.cnf que seja lido pelo especificado opções de plug-in mycnf_dir. Por exemplo:

# cat /opt/bacula/etc/.my.cnf
[client]
user=admin
password=admin1

Criação de Job de backup

Crie uma nova tarefa de backup usando o cliente de máquina MySQL e o novo FileSet com as opções de plug-in desejadas. Por exemplo:

Job {
  Name = "MySQL-BIN"
  Client = laptop1-fd
  FileSet = FS_mysql
  ...
}

Teste de Job de backup

Você pode usar o comando estimate para verificar se o plugin do MySQL está bem configurado. Ele deve listar os dumps de banco de dados que Bacula faria backup no caso de uma execução de trabalho.

* estimate listing job=my-test

Observe que, com o modo de dump, o Bacula não pode calcular o tamanho do dump para bancos de dados, portanto, ele exibirá o tamanho do banco de dados.

Restauração do Método Dump

Usando a seleção do arquivo bweb Web Restore, BAT ou bconsole restore file, é possível selecionar diferentes elementos granulares do serviço MySQL e dos Bancos de Dados para restaurar. Do seguinte modo:

  • createdb.sql – Script de criação de banco de dados
  • schema.sql – Script de criação do esquema de banco de dados
  • data.sql – Dados do banco de dados
  • grants.sql – Todas as listas de usuários do banco de dados associados
  • global-grants.sql – Usuários globais do MySQL, senha e lista de opções.
  • settings.txt – Variáveis atuais globais para o servidor MySQL
  • my.cnf – Configuração do servidor MySQL

Restauração de uma Base no Método Dump

Como mostrado na Figura 3, para restaurar um único banco de dados com o plugin Bacula Enterprise MySQL, você precisa selecionar o diretório do banco no comando restore, a seleção deve conter o arquivo data (data.sql) e o script de criação do banco de dados (createdb. sql).

Plugin MySQL Bacula Enterprise – Guia Rápido 3

Figura 3. Restauração do Banco de Dados do Método MySQL Dump

Quando o diretório do banco de dados é selecionado, você pode usar o parâmetro where para restaurar o banco de dados para um novo banco de dados. Se você definir onde uma única palavra que contém apenas a..z, 0-9,. e _, o Bacula criará o banco de dados especificado e restaurará os dados nele.

Se o parâmetro where for um diretório (contendo /), o Bacula restaurará todos os arquivos para este diretório. Ao fazer isso, você poderá usar o mysql diretamente e restaurar a si mesmo.

Restauração de Usuários e Funções do MySQL

Para restaurar funções e usuários para seu servidor MySQL, basta selecionar o arquivo global-grants.sql localizado em /@MYSQL/<service>/global-grants.sql.

Então, usando where = / ou where = o plugin irá carregar este arquivo SQL para o seu banco de dados. Se algumas funções já existirem, os erros serão impressos no registro de tarefas. Observe que é possível restaurar o arquivo global-grants.sql para um diretório local, editar o arquivo e carregá-lo com o mysql para restaurar apenas uma seleção.

Restauração PITR Método de Dump

Para restaurar dados do log binário, você deve saber o nome e o local dos arquivos de log binários atuais quando o backup foi feito. Essas informações estão disponíveis na linha “CHANGE MASTER” na parte superior do arquivo data.sql.

-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE=’sql-bin.000004’, MASTER_LOG_POS=2083;

Essas informações também são impressas no relatório de tarefas Bacula ao restaurar um despejo diretamente em um novo banco de dados usando o parâmetro where=novo_banco.

...
Found MASTER_LOG position sql-bin.000004:2083 for "database5276"
...

Depois de ter essas informações e todos os arquivos de log gerados entre o backup completo e o momento em que você deseja restaurar, você precisa usar o programa mysqlbinlog.

# mysqlbinlog -j 2083 sql-bin.000004 sql-bin.000005...

Esse comando gerará um script SQL que você pode carregar em seu banco de dados restaurado para executar o processo de recuperação. Você pode querer parar o processo de recuperação no meio de um arquivo de log, para isso, o mysqlbinlog fornece várias opções, como –stop-datetime, para controlar esse comportamento. Consulte a documentação do mysqlbinlog para todos os parâmetros – http://dev.mysql.com/doc/refman/5.1/en/mysqlbinlog.html.

Como a saída do programa mysqlbinlog é um script SQL, você também pode editar o script para atender às suas necessidades. Por exemplo, se o banco de dados tiver um novo nome, você precisará editar o script SQL para alterar as referências do banco de dados.

# mysqlbinlog -j 2083 mysql-bin.000004 ... | 
sed ’s/use ‘orgname‘/use ‘newname‘/’ | 
mysql -u root newname

Para mais informações sobre PITR com MySQL, consulte a documentação do MySQL: http://dev.mysql.com/doc/refman/5.1/en/point-in-time-recovery.html

Restauração de Tabela Única

Para restaurar um único item, como uma tabela, você precisa restaurar o arquivo de despejo para um diretório e usar o comando mysql. Por exemplo:

$ sed -n -e ’/Table structure for table .mytable.$/,/Table structure for table/p’ data.sql

Esse comando sed extrairá a estrutura da tabela, o índice e os dados do dump.

Restauração Completa do Servidor MySQL

Para restaurar todos os bancos de dados e a configuração do servidor, basta selecionar todos os arquivos localizados em /@MYSQL/<service>, use replace = always e where = /.

Restauração do Método Binário

Restauração Completa do Servidor

Depois de restaurar o conteúdo do backup com o Bacula, os arquivos que usam o formato tar devem ser extraídos com a opção tar -i. Com o formato xbstream, você pode extrair dados com a opção -x.

% cd @MYSQL/main
% xbstream -x < all-databases.xbstream
% ls
all-databases.xbstream     ibdata1.delta           performance_schema
xtrabackup_logfile         ibdata1.meta            testdb
backup-my.cnf              xtrabackup_checkpoints  mysql
xtrabackup_binary          xtrabackup_binlog_info

Quando os arquivos são descompactados, você pode preparar o backup com a opção –apply-log da ferramenta innobackupex. Se você planeja aplicar backups incrementais, também precisa usar a opção –redo-only.

% innobackupex --apply-log --redo-only $PWD
...
120604 02:50:02 innobackupex: completed OK!

Cada incremental deve ser extraído em um diretório específico, então eles devem ser aplicados aos dados base.

% mkdir incr1
% cd incr1
% xbstream -x < ../all-databases-1220202.xbstream
% cd ..
% innobackupex --apply-log --redo-only --incremental-dir=incr1 $PWD
...
120604 02:51:02 innobackupex: completed OK!
% mkdir incr2
% cd incr2
% xbstream -x < ../all-databases-1320402.xbstream
% cd ..
% innobackupex --apply-log --redo-only --incremental-dir=incr2 $PWD
...
120604 02:52:02 innobackupex: completed OK!

Quando os arquivos são descompactados, você pode preparar o backup com a opção –apply-log da ferramenta innobackupex:

% innobackupex --apply-log $PWD
...
120604 02:51:02 innobackupex: completed OK!

Agora os arquivos no diretório local estão prontos para serem usados pelo servidor. A opção –copy-back copiará os dados preparados de volta ao seu local original, conforme definido pelo datadir no seu my.cnf. Note que você pode usar –defaults-file = /caminho/para/my.cnf para especificar o arquivo de configuração my.cnf.

% innobackupex --copy-back $PWD
...
120604 02:58:44 innobackupex: completed OK!

Você deve verificar as permissões do arquivo depois de copiar os dados de volta. Você pode precisar ajustá-los com algo como:

% chown -R mysql:mysql /var/lib/mysql

Agora o datadir contém os dados restaurados. Você está pronto para iniciar o servidor.

Referências

MySQL 8.0 Reference Manual – https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html

MySQL Backup Using Bacula Enterprise Edition whitepaper – http://baculaystems.com

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

Deixe uma resposta