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