Solução simples de backup bash

3

Eu tenho uma experiência muito limitada com shell scripts e gostaria de colocar em prática algum tipo de script que faça o backup do meu blog (Wordpress) semanalmente.

Aqui está o que eu tenho até agora

#!/bin/bash

# Determine current date
setenv CURDATE date +%Y%m%d

# Backup DB & email it to me
mysqldump dbname -u user -ppassword | gzip | uuencode ${CURDATE}dbname.sql.gz | mail -s "backup for dbname ${CURDATE}" [email protected]

cd /home/myhome

# Zip blog
tar cf - blog.mysite.me | gzip - > ~/backups/${CURDATE}blog.mysite.me.tar.gz

E isso é onde eu estou um pouco preso ... Eu estava pensando em enviar-me por e-mail o diretório do blog, mas o que acontece quando isso se torna maior que 10MB ou mais? como eu poderia escrever isso para dividir isso e me mandar os pedaços?

Outra sugestão que tenho é melhor transferir os backups para outro VPS que possuo. Mas por causa do espaço, eu gostaria de manter apenas os últimos 10 backups. Como eu implementaria a parte do script de script que:

  1. Fazer upload de backup
  2. Obter lista de arquivos
  3. Conta os arquivos no diretório atual (por exemplo, / home / myhome / backups / blog)
  4. Se contar > 10 excluir mais antigos

Qualquer ajuda / conselho ou ponteiros para resolver este problema seria muito apreciado:)

    
por Malachi 19.04.2011 / 22:16

2 respostas

4

Em vez de compactá-lo e fazer isso, use o rsync na rede. Se você criar um novo diretório para cada data e usar a opção --link-dest para vinculá-lo ao diretório anterior, ele armazenará apenas os arquivos alterados, e os arquivos que não forem alterados serão um link físico para o diretório anterior. anterior.

Eu postei um código em Qual solução de backup você use para servidores linux

    
por 19.04.2011 / 22:29
4

Primeiro, para definir uma variável a partir de um comando use

CURDATE=$(date +%Y%m%d) 

em vez de

setenv CURDATE date +%Y%m%d

Se você quiser deixar apenas 10 dias de backup, poderá excluir o backup que foi feito há 10 dias. Use os comandos date relative para encontrá-lo e salve em outra variável:

PAST_DATE=$(date +"%m-%d-%Y" --date="10 days ago")

Segundo, você pode usar lftp para executar comandos ftp em uma única linha, assim:

lftp -u user,pass server -e "mrm *${PAST_DATE}.sql.gz; exit;

Se você usar a data nos nomes dos arquivos e, a cada dia, remover os arquivos com 10 dias, poderá fazer exatamente o que está pensando. Você pode usar lftp para colocar os arquivos também, funciona como um cliente comum, só que funciona em uma única linha.

    
por 19.04.2011 / 22:41

Tags