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;