backup de um site - estratégia recomendada e etapas para um administrador de sistema novato

1

Estou executando um site LAMP no Linux 10.0.4 LTS. Eu sou um novato sysadmin (eu sou um desenvolvedor embora) e estou procurando alguns conselhos sobre a melhor forma de implementar backup para o meu site. Meu banco de dados é mySQL e todas as minhas tabelas de banco de dados usam o mecanismo de banco de dados InnoDb.

Estes são os requisitos para o backup que eu quero implementar:

  1. Incorpora backups incrementais e completos do banco de dados mysql Eu gostaria de ter backups incrementais por hora, mas também backups diários, semanais e mensais Mas não está claro em minha mente que rotação usar para esses vários conjuntos de dados de backup - e também como gerenciá-los (e mais importante, como restaurar o banco de dados de um conjunto de backups completos / incrementais para uma data)

  2. Gostaria de compactar e criptografar os dados, para que eu possa armazená-los remotamente (Amazon S3)

  3. Eu quero ter isso totalmente automatizado (ou seja, executado como um cron job).

Nota: Meu servidor é 'headless', pois não possui janelas X ou outra GUI instalada, por isso estou pensando em implementar o backup em um script bash. Como alternativa, se houver software lá fora que possa me ajudar a executar esse tipo de backup, ele precisará ser capaz de ser executado a partir da linha de comando.

Os itens dos quais preciso fazer backup são:

  • banco de dados mysql
  • arquivos de sites (em uma pasta especificada. Idealmente, gostaria de deixar de fora alguns arquivos que são gerados automaticamente)
  • arquivos de configuração
  • arquivos de dados diversos em pastas diferentes

Aqui estão minhas perguntas:

  1. Existe algum software lá fora que eu possa usar para fazer isso, ou eu preciso escrever o meu próprio (script bash)?

  2. Qual é a estratégia de backup recomendada para usar (em termos do que é executado por hora, diariamente, semanalmente, etc.) e como restaurar o site a partir de um ponto específico no tempo?

Se eu tiver que escrever meu próprio script bash (sendo um novato no script bash), ficarei grato se alguém puder fornecer um esqueleto de script para me ajudar a começar.

[Editar]

symcbean: você poderia listar quais informações adicionais você precisa de mim para dar "conselhos mais personalizados"? Em termos de orçamento, vamos apenas dizer que é zero. Portanto, não consigo me separar muito mais do servidor dedicado (dedicado) que hospeda o armazenamento do Amazon S3. É também por isso que preciso usar software de código aberto ou escrever meu próprio script bash usando as ferramentas disponíveis no Linux.

É um novo website e, inicialmente, os dados de backup provavelmente ficarão abaixo de 1 Gb, mas espero que os dados estejam crescendo em pelo menos 100 MB por dia. Isso é muito rápido se eu fizer backups completos diariamente e enviar o (s) arquivo (s) de backup por transferência para o Amazon S3.

Eu sugeri backups incrementais porque quero economizar nos custos de largura de banda (sem mencionar a carga do servidor) associados à transmissão potencialmente, vários Gigabytes de dados todos os dias.

Além disso, ninguém (até agora) explicou como alternar entre os backups [de hora em hora?], diários, semanais e mensais.

Há muitas informações / opiniões (muito diferentes) sobre os backups. Eu só quero saber qual é a 'melhor prática' recomendada em relação à minha situação particular, conforme descrito acima.

Se mais informações forem necessárias para poder sugerir uma recomendação mais "personalizada", informe-nos para que eu possa fornecer as informações necessárias.

    
por user35402 31.07.2010 / 20:07

3 respostas

1

hourly incremental backups, but also daily, weekly and monthly backups

Eu recomendo strongmente não usar o mysqldump em seu sistema live. Mesmo com tabelas innodb, será difícil obter backups coerentes de um sistema em execução.

Como de costume, você não forneceu muitas indicações sobre as restrições em termos de acesso e orçamento, nem uma indicação clara do que está tentando alcançar aqui.

Eu recomendaria usar a replicação do mysql para manter um banco de dados em espera ativa. Mas, para obter um instantâneo consistente do sistema, você precisará desativar a replicação no cliente, executar mysqldump, depois ativar a replicação e manter o arquivo de despejo no backup completo.

Em termos de software - você obviamente foi criado em um ambiente MSWindows. Escrever scripts é fácil e todas as ferramentas para compactar, criptografar, nomear e mover arquivos são padrão em uma distribuição Linux - é apenas uma questão de como você as usa. Dito isto, o meu software preferido para fazer o backup de arquivos é o afio - que normalmente não é incluído em instalações mínimas (você terá tar, cpio, gzip, rsync, ssh). Se você tiver um google for afio, encontrará muitos documentos explicando suas virtudes em comparação com as ferramentas padrão.

Um backup só será usado se você souber como e se você puder restaurá-lo.

IMHO, backups incrementais são uma perda de tempo. Claro que fazia sentido quando o meio de backup era caro - não é mais o caso - o armazenamento é relativamente barato em comparação com o custo do seu tempo e esforço e o valor dos dados. A última coisa que você deseja ao restaurar um sistema é descobrir qual sequência de backups restaurar para obter uma imagem consistente - e se você tiver um backup com falha no conjunto, tudo pode dar errado.

A melhor solução seria uma replicação hot-standby (usando rsync para arquivos e replicação do mysql para o db). Em seguida, crie imagens externas (na rede, em fitas, em dvd ...) periodicamente a partir do stand by.

Se você está realmente precisando de dinheiro, então o "hot standby" pode facilmente existir em um segundo disco na mesma caixa que o site ao vivo, mas de preferência eu recomendaria uma máquina separada.

    
por 31.07.2010 / 23:48
0

O que fazemos no trabalho, além de ter um servidor de backup central no qual rotacionamos as unidades regularmente para uma origem externa. Nosso departamento possui configuração rsync e cada servidor web possui uma configuração de conta de par de chaves. Dessa forma, temos uma caixa, que se conectará a cada um de nossos servidores da web, fará um mysqldump e fará um rsynch no mysqldump, juntamente com os diretórios da web que especificarmos.

Para recuperar: você pode usar o rsynch para reconstruir em um determinado dia.

Para incremental, é uma questão de configurar os diferentes cron jobs para executar em intervalos desejados.

Eu posso fornecer mais detalhes sobre isso se você estiver interessado. Foi um script construído em casa.

    
por 31.07.2010 / 20:16
0

Eu tive uma pergunta semelhante referente aos bancos de dados há algum tempo ... você pode querer revisar:

Quanto ao rsync, convém consultar o seguinte site: link

    
por 31.07.2010 / 21:18