Backup de múltiplos bancos de dados MySQL ou MariaDB automaticamente

Você está aqui:
Tempo estimado de leitura: 2 min

Introdução

Neste write-up, vamos percorrer como fazer backup de vários bancos de dados MySQL ou MariaDB que ficam na mesma máquina usando um script bash personalizado e configurando uma tarefa cron.

Backup (s) de banco de dados

Assumiremos que temos três bancos de dados MySQL em nossa instância Site & Site denominados db-site-site , db-site-blog , db-site-app (não se preocupe em criar esses bancos de dados, você poderá substituir seus nomes para o seu caso eles sejam usados no script da Etapa 2 abaixo) .

  1. Faça o login no banco de dados MySQL ou MariaDB e execute a consulta abaixo para criar um usuário do banco de dados db_user_backupspara lidar com backups
    GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
    

    Também corra abaixo para se certificar de que o MySQL está configurado para restaurar corretamente os procedimentos armazenados

    SET GLOBAL log_bin_trust_function_creators = 1;
    
  2. Configure a estrutura de diretório e os arquivos necessários
    # create backup directory with environment and log file
    sudo mkdir /backups && cd /backups
    sudo touch .env db-backup.sh db-backup.log
    sudo chmod -R 775 /backups
    sudo chmod -R g+s /backups
    sudo chmod +x db-backup.sh
    
    # add mysql backup user credentials into environment file
    echo "export MYSQL_USER=db_user_backups" > /backups/.env
    echo "export MYSQL_PASS={COMPLEX-PASSWORD}" >> /backups/.env
    
  3. Abra db-backup.sh nano /backups/db-backup.she cole o código abaixo dentro dele, depois salve o arquivo (Ctrl + X -> Y -> pressione Enter) .
    DB_NAMES=( 'db-site-site' 'db-site-blog' 'db-site-app' ) #replace with your own database name(s)
    BKUP_NAMES=()
    BKUP_DIR="/backups"
    
    # get total number of directories
    total_dbs=${#DB_NAMES[@]}
    
    # create backup file names
    for (( i=0; i<${total_dbs}; i++ )); do
        BKUP_NAMES[$i]="`date +%Y%m%d%H%M`-backup-$${DB_NAMES[$i]}.sql.gz"
    done
    
    # get backup users credentials
    source $BKUP_DIR/.env
    
    # create backups
    for (( i=0; i<${total_dbs}; i++ )); do
        # NOTE: --routines flag makes sure stored procedures are also backed up
        mysqldump --routines -u ${MYSQL_USER} -p${MYSQL_PASS} | gzip > ${BKUP_DIR}/${BKUP_NAMES[$i]}
    done
    

    O código acima está circulando por meio de um array com o (s) nome (s) do (s) banco (s) de dados que você deseja fazer backup e fazendo isso.

Configuração Cronjob

Configure um cronjob para executar toda meia-noite que executa o script de backup e salva o resultado / saída no log de backup.

  1. Crontab aberto
    crontab -e
    
  2. Adicione abaixo a entrada ao crontab
    0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
    

    Nota: Durante o teste, você pode definir o cronjob para ser executado a cada 1 minuto, como abaixo

    * * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
    

    -OU- a cada 5 minutos (substitua 5 pelo número de minutos desejado)

    */5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
    

Qual é o próximo

Você provavelmente não desejará seu (s) backup (s) no (s) mesmo (s) servidor (es) executando (em) seu (s) banco (s) de dados, mas sim em um servidor em uma localização geográfica diferente. Existem várias maneiras de fazer isso, desde o uso de SFTP até o uso de ferramentas personalizadas fornecidas pela grande variedade de provedores de armazenamento em nuvem disponíveis no mercado. Uma boa alternativa é o Rsync, conforme explicado aqui – espelhamento de arquivo de instalaçâo.

Esse artigo foi útil?
Não Gostei 0
Visualizações: 156

Ainda não Têm uma Conta?

Então Cadastre-se

Nome de Usuário*
E-mail*
Senha*
Confirmar Senha*

Já têm Uma Conta? Click Aqui.

Já tem uma Conta?

Ainda não tem Conta?