Skocz do zawartości
Jarosław Szmańda

Specyficzny backup serwera

Polecane posty

Po przeczytaniu tego wątku http://www.webhostingtalk.pl/index.php?sho...c=15291&hl= doszedłem do wniosku że warto pomyśleć nad backup'em...

 

I teraz pytanie: Jak zrobić bakckup aby baza była kopiowana codziennie o ustalonej godzinie, a pliki 3 razy w tygodniu?

 

Np. katalog /var/backup/ i tutaj katalogi odpowiadające nazwa domen a w środku pliki o nazwie 28_11_2008_jarek.pl_pliki.tar.gz 28_11_2008_jarek.pl_sql.tar.gz

 

I analogicznie, nowa kopia - nowa data.

 

Może są już jakieś gotowe skrypty?

W jakiej technice to robić? Perl, Python, PHP?

 

Pzdr!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A co mu da taki backup jak nie ma RAID'a ? Może przed hacked uchroni, ale padem hdd już nie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
I teraz pytanie: Jak zrobić bakckup aby baza była kopiowana codziennie o ustalonej godzinie, a pliki 3 razy w tygodniu?

 

Widze, ze nic konkretnego ci nie napisali, wiec ja odpisze.

Jak masz duze, bazy danych to hotcopy albo lvmbackup. Zakladam, ze masz male bazy, nie masz LVM i wolisz zrzuty mysqlowe wiec uzyj mysldump. Np. tak:

 

path="/mysql-backup"
for db in `mysql -Nse 'show databases'` 
do
	dump="${db}_`date '+%F'`.sql"
	remove="${db}_`date --date '7 days ago' '+%F'`.sql.gz"
	mysqldump -l $db > $path/$dump
	gzip $path/$dump
	if [ -f "$path/$remove" ]
	then	
			rm -f -- "$path/$remove"
	fi
done

Zakladajac ze masz konfiguracje polaczenia do bazy w /root/.my.cnf i z uzytkownika root nie zapyta cie o haslo. To jest konfiguracja na backup raz dziennie. Jesli chcesz co godzine to zmien znacznik czasow w date z '+%F' na bardziej wyrafinowany. Moze byc nawet '+%s'.

 

Do backupu danych polecam rdiff-backup lub xfsdump. Dla twoich zastosowan prawdopodobnie bardziej ci styknie rdiff-backup - jest to skrypt pythonowy oparty o rsync. Robi kopie przyrostowe wiec robisz backup tylko zmieniajacych sie danych.

 

Na przyklad mozesz wykonywac backup w ten sposob:

dpkg --get-selections '*' > /var/backups/dpkg.selections

/usr/bin/rdiff-backup \
--include /adm \
--include /bin \
--include /boot \
--include /etc \
--include /lib \
--include /opt \
--include /root \
--include /sbin \
--include /service \
--include /tftproot \
--include /usr \
--include /var \
--exclude /var/lib/mysql \
--exclude /var/lib/mysql-cluster \
--exclude /var/lib/mysql-system \
--exclude / \
/ backup@maszyna.backupowa.pl::backup

/usr/bin/rdiff-backup --remove-older-than 1M backup@maszyna.backupowa.pl::backup

 

Zakladajac, ze root na maszyne backupowa moze polaczyc sie z uzyciem kluczy, bez hasla, ani bez passphrase. To sobie wrzucasz do crona.daily i bedzie hulac. Jak mozna sie domyslic backup starszy niz jeden miesiac jest usuwany. Aby sprawdzic, czy sie dobrze wykonal i ile kopii przyrostowych znajduje sie aktualnie w backupie dajesz rdiff-backup -l sciezka/do/backupu/nazwa_backup na maszynie backupowe

 

Na maszynie backupowej madrze jest ustawic authorized_keys w ten sposob:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="rdiff-backup --server",from="1.2.3.4" ssh-rsa  =FEURIER432U4I32H4U43423_TUTAJ_KLUCZ_RSA_RRHUIREER root@maszynka.pl

Jak ktos ci przejmie jedna maszyne to nie uzyska shella na drugiej za pomoca kluczy. Ale to tylko dla paranoikow.

 

Jesli nie masz dostepu do shella na maszynie gdzie chcesz wrzucac backup to kombinuj inaczej. Uzyj wyobrazni, rob backup lokalnie i przerzucaj po FTP. Moze jest wystawiona usluga rsync na serwerze backupowym. Z tego co wiem ani rdiff-backup, ani rsync nie potrafia przerzucac danych po FTP, wiec bedziesz musial wymyslec obejscie.

 

Mam nadzieje, ze moje informacje okazaly sie pomocne.

Pozdrawiam.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ja korzystam z prostego rozwiązania w bashu backup robiony o 3 w nocy i wysyłany emailem oraz FTP na osobne maszyny . Ps bazy maja tylko w sumie 80 mega

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Szczerze mówiąc to nie słyszałem nigdy większej głupoty jak wysyłanie backup'a mailem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Szczerze mówiąc to nie słyszałem nigdy większej głupoty jak wysyłanie backup'a mailem.

 

Czemu nie?

Zalozmy, ze masz tylko jeden serwer lub jedno konto. Zakladasz sobie poczte na GMail, robisz mysqldumpa, szyfrujesz symetrycznie pgp, robisz splita jak potrzeba i wysylasz na darmowy, niezawodny, serwer backupowy powered by Google :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Choćby ze względu na wydajność, skanowanie antyspamami, etc?

No ale to już zależy jakiej wielkości są te wysyłki i być może z prostego powodu, iż ktoś może nie mieć innej możliwości.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Adrian to nie jest serwer pod komercjalizm czy cos takiego ;) zwykłe malutkie 3 moje projekty + może jakieś mini strony znajomych i rodziny i tyle

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Choćby ze względu na wydajność, skanowanie antyspamami, etc?

 

Obchodzi cie wydajnosc i skanowanie antyspamami po stronie Google? Bo mnie wcale.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Obchodzi cie wydajnosc i skanowanie antyspamami po stronie Google? Bo mnie wcale.
A to, że przesyłane dane są kodowane do base64, przez co zajmują ~33% więcej miejsca (a zatem zużywają więcej transferu), pewnie też Cię nie obchodzi?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Opcja dla osób bez rsynca: mój skrypt dla tych, którzy chcą wysyłać backup na wiele serwerów FTP (w szczególności jeden). Wymagany jest zainstalowany klient lftp (apt-get install lftp). Przykład z rozsyłaniem na konta FTP bazy danych.

#!/bin/bash

# katalog na backup
dest_dir=/var/backup/

# Serwery FTP
servers='ftp1.pl ftp2.pl'
login=(login1 login2)
pass=(haslo1 haslo2)
remote_dir=(htdocs/backup1 www/backup2)

# mysql
sql_login=login
sql_pass=pass
sql_db=db

##################

save_date=`date '+%Y-%m-%d_%H-%M-%S'`
db_filename=$sql_db"_"$save_date".sql"
filename=$db_filename".gz"

# kopia
cd $dest_dir
echo -n "Backup bazy danych ($filename)... "
mysqldump -u$sql_login -p$sql_pass --opt $sql_db > $db_filename
gzip $db_filename
echo "OK"

i=0
for server in $servers; do
echo "Kopiuje do $server... "
l=${login[$i]}
p=${pass[$i]}
rd=${remote_dir[$i]}
echo "open $server" > script.lftp
echo "user $l $p" >> script.lftp
echo "cd $rd" >> script.lftp
echo "put $filename" >> script.lftp
echo "quit" >> script.lftp
lftp -f script.lftp
echo OK

i=$[i + 1]
done;

rm script.lftp

# usuniecie starych kopii sprzed 60 dni
find . -name $sql_db"_*" -ctime +60 -exec rm {} \;

 

Można sobie bez problemu rozpisać o backup plików (tar ma np. opcję robienia backupu przyrostowego tak btw.) i dodać do crona (JarekMK: http://pl.wikipedia.org/wiki/Crontab).

 

A jak ktoś chce wysyłać backup pocztą, to składnia dla mutta wygląda tak (dla mail z mail-utils z tego co pamiętam załącznik źle sie kodował i dołączał na Etchu [tak, przepuszczony przez uuencode] ):

echo | mutt -s "backup z $save_date" -a "$filename" email@domena.tld

 

To mi nie działało:

uuencode "$filename" | mail email@domena.tld -s "backup z $save_date"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
A to, że przesyłane dane są kodowane do base64, przez co zajmują ~33% więcej miejsca (a zatem zużywają więcej transferu), pewnie też Cię nie obchodzi?

 

Po co te nerwy ;)

Zamiast 100MB wyslesz 133MB. Dla mnie to nieistotna roznica.

BTW, polecam hosting bez limitu transferu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
BTW, polecam hosting bez limitu transferu.

 

Marcin, limity zawsze są, jednak tu się zgodzę słowa brak limitu pasują. Byłem użytkownikiem, również polecam ;) Cóż za OT :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Takie mam małe pytanie do backupowców-emailowców...

Większość serwerów ma ustawione limity rozmiaru pojedynczej paczki... jak to pogodzić z backupem, który czasami jest dosyć duży?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

How to split large file into several smaller files - Linux. Tak podzielony plik można później scalić też na windows:

type filepart1 filepart2 > filefull

 

Wygodniejszą opcją jest zainstalowanie na serwerze programu rar (http://rarlab.com/download.htm), który ma dzielenie na pliki i szyfrowanie w standardzie. Tylko, że archiwum tworzone RARem generuje się dłużej (przy szyfrowaniu bez kompresji) lub znacznie dłużej (przy szyfrowaniu i kompresji) niż gzipem czy bzipem. Do dużych archiwów raczej nadaje się tylko w opcji bez szyfrowania i bez kompresji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Marcin, limity zawsze są, jednak tu się zgodzę słowa brak limitu pasują. Byłem użytkownikiem, również polecam :) Cóż za OT :)

 

Zle zrozumiales slowo 'brak limitu'. Brak limitu = brak ograniczen w przesyle danych (oprocz fizycznych oczywiscie). Provider nie zlicza ci ruchu, ktory przesylasz i nie pobiera oplat za nadmiarowe gigabajty.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×