Comparativo de Ferramentas de Backup MySQL e Configuração do Servidor Nginx

Backup de Bancos de Dados

mysqldump

O mysqldump é uma ferramenta tradicional do MySQL com as seguintes características:

  • Bloqueia as tabelas durante o processo
  • Performance reduzida para grandes volumes de dados
  • Não suporta backups incrementais
  • Execução em thread única
# Opções principais do mysqldump
# -A : exporta todos os bancos de dados
# -B : seleciona bancos específicos para backup
# -F : força a rotação dos logs binários antes do backup
# --flush-privileges : inclui instruções de reload das permissões
# -p : solicita senha de autenticação
# -u : define o usuário de conexão
# -P : especifica a porta do servidor
# A ferramenta também preserva triggers, procedures e functions

# Realizando backup completo via socket local
mysqldump -uroot -S /var/run/mysqld/mysqld.sock -A -p > full_dump.sql

# Método de restauração 1 - via cliente MySQL interativo
# Conectar ao servidor e executar: SOURCE /caminho/full_dump.sql;

# Método de restauração 2 - via linha de comando
mysql -uroot -p < full_dump.sql

Percona XtraBackup

O XtraBackup possui vantagens significativas:

  • Utiliza múltiplos processos paralelos
  • Permite backups incrementais
  • Bloqueio apenas a nível de linha

Instalação do XtraBackup

# Adicionando o repositório oficial da Percona
rpm -Uvh https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# Instalando o pacote do XtraBackup versão 2.4
yum install -y percona-xtrabackup-24

# Parâmetros disponíveis:
# --target-dir=caminho : destino do backup gerado
# --backup : executa operação de backup
# --prepare : prepara o backup para restauração
# --databases=lista : filtra bancos específicos
# --databases-file=arquivo : lista de bancos em arquivo externo

Criando Usuário Dedicado para Backups

CREATE USER 'bkp_user'@'localhost' IDENTIFIED BY 'SenhaSegura123!';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkp_user'@'localhost';
FLUSH PRIVILEGES;

Executando Backup Completo

xtrabackup --backup \
  --target-dir=/srv/backups/full_backup \
  -ubkp_user \
  -p'SenhaSegura123!' \
  --socket=/var/run/mysqld/mysqld.sock

# Saída esperada indicando sucesso:
# xtrabackup: Transaction log of lsn (5480853) to (5480862) was copied.
# completed OK!

Processo de Restauração

# Etapa 1: Aplicar logs de transação ao backup
xtrabackup --prepare --target-dir=/srv/backups/full_backup

# Etapa 2: Copiar arquivos de volta ao diretório de dados
cd /srv/backups/full_backup
cp -rf my_database /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/my_database/

# Alternativa: restaurar todos os arquivos automaticamente
xtrabackup --copy-back --target-dir=/srv/backups/full_backup
chown -R mysql:mysql /var/lib/mysql/

Backups Incrementais

# Backup incremental 1 - baseado no backup completo
xtrabackup --backup \
  --target-dir=/srv/backups/incr_01 \
  --incremental-basedir=/srv/backups/full_backup \
  -uroot -p --socket=/var/run/mysqld/mysqld.sock

# Backup incremental 2 - baseado no primeiro incremental
xtrabackup --backup \
  --target-dir=/srv/backups/incr_02 \
  --incremental-basedir=/srv/backups/incr_01 \
  -uroot -p --socket=/var/run/mysqld/mysqld.sock

# Preparar o backup base aplicando apenas logs
xtrabackup --prepare --apply-log-only --target-dir=/srv/backups/full_backup

Restauração com Backups Incrementais

# Aplicar logs ao backup base
xtrabackup --prepare --apply-log-only --target-dir=/srv/backups/full_backup

# Incorporar primeiro incremento
xtrabackup --prepare --apply-log-only \
  --target-dir=/srv/backups/full_backup \
  --incremental-dir=/srv/backups/incr_01

# Incorporar segundo incremento
xtrabackup --prepare --apply-log-only \
  --target-dir=/srv/backups/full_balance \
  --incremental-dir=/srv/backups/incr_02

# Restaurar dados e reiniciar serviço
xtrabackup --copy-back --target-dir=/srv/backups/full_backup
chown -R mysql:mysql /var/lib/mysql/
systemctl restart mysqld

Servidor Web Nginx

O Nginx é um servidor HTTP de alta performance, amplamente utilizado como proxy reverso e balanceador de carga. Alternativas incluem Apache, IIS e Tengine.

Compilação e Instalação

# Baixando o código fonte
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar xzf nginx-1.16.1.tar.gz
cd nginx-1.16.1

# Instalando dependências do sistema
yum install -y gcc pcre-devel openssl-devel zlib-devel

# Configurando compilação com módulos adicionais
./configure \
  --prefix=/opt/nginx \
  --with-http_ssl_module \
  --with-http_stub_status_module

# Compilando e instalando
make && make install

Estrutura de Diretórios

[root@webserver nginx]# ls
conf  html  logs  sbin

# conf : arquivos de configuração do servidor
# html : documentos estáticos (index.html é a página padrão)
# logs : registros de acesso e erros
# sbin : executável principal do nginx

# O processo mestre gerencia os workers filhos
# O mestre apenas encaminha requisições
# Os workers processam efetivamente as requisições dos clientes

Parâmetros de Inicialização

$ /opt/nginx/sbin/nginx -h

# Opções disponíveis:
# -v : exibe versão compilada
# -V : mostra versão e opções de compilação
# -t : valida arquivo de configuração
# -s sinal : envia comando ao processo mestre (stop, quit, reload, reopen)
# -p prefixo : define diretório base
# -c arquivo : especifica arquivo de configuração alternativo

Arquivo de Configuração Principal

# Diretivas globais
user nginx;                         # Usuário para execução dos workers
worker_processes auto;              # Número de workers (geralmente = núcleos CPU)
worker_rlimit_nofile 65535;         # Limite de descritores por worker

error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;

events {
    use epoll;                      # Método de notificação do kernel
    worker_connections 4096;        # Conexões simultâneas por worker
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    # Formato personalizado de log
    log_format detailed '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';

    access_log /var/log/nginx/access.log detailed;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  75;

    # Configuração do servidor virtual
    server {
        listen       80;
        server_name  exemplo.com.br;

        location / {
            root   /var/www/html;
            index  index.html index.htm;
        }

        # Página personalizada para erro 404
        error_page 404 /404.html;
        location = /404.html {
            root /var/www/html;
        }

        # Tratamento de erros do servidor
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /var/www/html;
        }
    }
}

Diferença entre root e alias

As diretivas root e alias possuem comportamentos distintos:

# Com root: o caminho do location é concatenado ao diretório
# Requisição para /imagens/arquivo.jpg procura em /storage/imagens/arquivo.jpg
location /imagens {
    root /storage;
}

# Com alias: substitui completamente o caminho do location
# Requisição para /imagens/arquivo.jpg procura em /storage/arquivo.jpg
location /imagens {
    alias /storage;
}

Configuração de Nommes de Domínio

# Definindo domínio para o servidor
server_name app.meudominio.com;

Múltiplos Domínios em Servidores Separados

# Primeiro servidor virtual
server {
    listen 80;
    server_name www.loja-a.com loja-a.com;
    root /var/www/loja-a;
    index index.html;
}

# Segundo servidor virtual
server {
    listen 80;
    server_name www.loja-b.com loja-b.com;
    root /var/www/loja-b;
    index index.html;
}

Servidor Padrão (Default)

# Define este servidor como padrão para requisições sem match
listen 80 default_server;

Tags: MySQL mysqldump percona-xtrabackup backup-incremental nginx

Publicado em 6-6 16:40 por Thomas