De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 9 de março de 2022
Backup é uma coisa tão importante que deveria ser feita pelo presidente da empresa.
E backup do banco de dados então nem se fala.
Dependendo do tamanho do servidor, número de bancos de dados, etc, a coisa
pode ficar bem complexa. O ideal então é criar procedimentos a serem executados
a partir do cron
, para não deixar nada de fora.
O comando abaixo é um exemplo de comando para backup de todos os bancos de dados sob o gerenciador MySQL.
mysqldump -u root -p senhadobancodedados \ --single-transaction --lock-tables \ --events --all-databases |\ gzip > mysql.$data.sql.gz
Este comando contém um erro escandaloso. A senha do gerenciador MySQL está
sendo fornecida na linha de comandos. Qualquer pessoa que tenha acesso ao
servidor durante a execução deste comando, poderá obter a senha do gerenciador
por meio de um simples comando ps
.
Para evitar fornecer a senha do gerenciador do banco de dados na linha de comandos, siga os seguintes passos:
1. Edite o arquivo .my.cnf
vi ~/.my.cnf
2. Insira as seguintes linhas no arquivo:
[mysqldump]
host=localhost
user=(identificação do usuário)
password=(senha de acesso ao gerenciador)
O próximo passo é proteger este arquivo, para impedir sua visualização por pessoas não autorizadas. ISSO É MUITO IMPORTANTE!
$ chmod 600 ~/.my.cnf
Com este comando, apenas o dono do arquivo .my.cnf
terá acesso ao seu
conteúdo.
Ainda não acabou. É preciso proteger também o arquivo ~/.mysql_history
que contém o histórico dos comandos MySQL executados no sistema. Não é
conveniente que os comandos que você usa para gerenciar seus bancos de dados
estejam visíveis para pessoas não autorizadas. Alguns destes comandos podem
conter senhas, e na mão das pessoas erradas, o pior pode acontecer.
$ chmod 600 ~/.mysql_history
Isto feito, o comando exemplificado acima, pode ser executado novamente, porém sem especificar a senha:
mysqldump -u root \ --single-transaction --lock-tables \ --events --all-databases |\ gzip > mysql.$data.sql.gz
Eu sou meio neurótico com backups, e além do backup de todos os bancos de dados, como no exemplo acima, eu faço também backups individuais de cada um dos bancos de dados.
Vejamos um exemplo de script para backup de bancos de dados:
#!/bin/bash cd /home/mysql find . -mtime +30 | xargs rm data=`date +%Y%m%d-%Hh%M` echo $data for bd in BD1 BD2 BD3 BD4 BD5 do mysqldump -u mysqlusr --single-transaction --lock-tables --events $bd | gzip > $bd.$data.sql.gz done mysqldump -u mysqlusr --single-transaction --lock-tables --events --all-databases | gzip > alldatabases.$data.sql.gz rsync -av --delete /home/mysql/ /mysql
Este script grava os arquivos de backup no diretório /home/mysql
. Como o
número de arquivos cresce muito com o tempo, são mantidas apenas 30 versões dos
arquivos de backup. As versões mais antigas são removidas com o comando find
e xargs
.
O backup dos bancos de dados é feito através do loop for
e após o
loop é feito um backup conjunto de todos os bancos de dados.
Backup nunca é demais 😉
Ao final, eu faço uma cópia adicional, sincronizando o conteúdo de /home/mysql
em /mysql
. Estes dois diretórios residem em discos separados, adicionando
mais um nível de segurança.
E tem mais, periodicamente todo este diretório é copiado para um servidor externo.
Agora a parte mais fácil, fazer o agendamento do backup via cron
:
# crontab -e
Inserir na crontab a seguinte linha:
00 12,23 * * * /usr/local/bin/mysqldump.sh
Esta linha instruí o sistema cron
a executar o backup duas vezes por dia,
às 12h e às 23h.
Dependendo da atividade do seu gerenciador de banco de dados, pode ser conveniente executar este script mais vezes durante o dia.
É importante destacar que o gerenciador MySQL possui recursos muito poderosos
para backup e recuperação. Este procedimento é bastante simples e o objetivo
é apenas ilustrar a execução de comandos como mysqldump
sem a necessidade
de especificar a senha na linha de comandos.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários