backup skript v perli - fórum

Kategorie: WEDOS Disk / Free varianta

přidatNový příspěvek

Chcete-li odebírat toto téma e-mailem, přihlašte se nebo se nejprve zaregistrujte.

backup skript v perli

Štefan Jarina, 26.08.2012 17:02:58

Vrámci mojej výuky Perlu som si napísal script na zálohu súborov + zoznamu balíčkov a zálohu mysql.

OS: debian a centos
Použitý software:
Perl v5.10.1 a vyšší (používam use feature '5.10'; tak to nepobezi na 5.8 a nizsej verzii)
Duplicty 0.6.18

Wedos disk mám pripojený cez sambu

AKO TO FUNGUJE:

backup.pl --- backup skript

-- prvý deň v týždni spraví full zálohu, nasledujúce dni len incremental backup
-- backup sa ukladá do zložiek podľa aktuálneho čísla týždňa
-- retention mam nastaveny na 4 tyzdne, da sa nastavit v skripte na akykolvek pocet tyzdnov
-- skript vytvorí dump mojej mysql databazi a ulozi do zlozky inej ako main backup
-- list nainstalovanych balickov je ulozeny pri hlavnom backupe

file-list.txt --- backup excludes list
-- specifikuje ktore zlozky chceme vynat z backupu (v mojom setupe je prazdny, ale da sa pouzit a nastavit)

SETUP:
apt-get install duplicity
yum install duplicity

mkdir /root/backup
chmod 0700 /root/backup
touch /root/backup/backup-file.sh
touch /root/backup/file-list.txt
chmod 700 /root/backup/backup-file.sh
chmod 600 /root/backup/file-list.txt

EXCLUDE LIST:
file-list.txt ukazka ako moze vyzerat:

- /var/tmp
+ /var/cache
- **/.cache
- /mnt/**

SKRIPT:
backup.pl

#!/usr/bin/env perl
##############################################
## BACKUP SKRIPT BY STIWY ##
## 2012 ##
## version 0.1 ##
## email: stefan@jarina.cz ##
##############################################
use feature ':5.10';
use strict;
use locale;

my $zaloha_zaciatok = `date +"%F %T"`; chomp($zaloha_zaciatok);
say "--------------------------";
say "- BACKUP SKRIPT BY STIWY -";
say "- 2012 -";
say "--------------------------\n";
sleep(1);

#### DUPLICITY SETUP START ####

say "Nastavujem premenné\n";
# Heslo pouzite na kryptovanie zalohy:
$ENV{PASSPHRASE} = 'heslo';

# Ktorym programom zalohovat - DUPLICITY:
my $zal_program;
if (system("which duplicity >/dev/null 2>&1") == 0){
$zal_program = `which duplicity`; chomp($zal_program);
}else{
say "Nenašiel som zálohovací program.\nSkript sa ukončí.";
exit();
}

# CO ZALOHOVAT A SPECIALNE NASTAVENIA
my $zal_co = '/srv/www';
my $zal_incl_list = '/root/backup/file-list.txt';
my $specialne_nastavenia = "";

# ZALOHA ZOZNAMU NAINSTALOVANYCH DEBIAN BALICKOV
my $debian_pkg_list = 0; #Zmen na 1 ak chces zapnut

# ZALOHA ZOZNAMU NAINSTALOVANYCH CENTOS BALICKOV
my $centos_pkg_list = 0; #Zmen na 1 ak chces zapnut

# Nastavenie kam zalohovat subory:
my $zal_disk = '/media/backup';
my $zal_ciel = $zal_disk . '/backup_files';
my $zal_adresar = `date +"%V"`; chomp($zal_adresar);
my $zal_cesta = $zal_ciel . '/' . $zal_adresar;

# Nastavenie kam zalohovat databazu:
my $zal_ciel_sql = $zal_disk . '/backup_mysql';
my $zal_cesta_sql = $zal_ciel_sql . '/' . $zal_adresar;
my $specialne_nastavenia_sql = "";

# Nastavenie retention
my $typ_zaloh = 'full'; #FULL BACKUP - neskor v skripte nastavene na raz tyzdenne
my $typ_zaloh_sql = 'full'; #FULL BACKUP - neskor v skripte nastavene na raz tyzdenne
my $max_full_zaloh = 4; #Zachovat najviac 4 full zalohy - znamena najviac mesiac
#### DUPLICITY SETUP STOP ####

## ENABLE/DISABLE MYSQL BACKUP ##
# Change to 1 to enable
my $backup_mysql = 0;

#### MYSQL SETUP START ####
my $muser = 'root';
my $mpass = 'heslo';
my $mhost = 'localhost';

# Vypisanie na obrazovku stav mysql backupu:
if($backup_mysql == 0){
say "MYSQL BACKUP je vypnuty.";
}else{
say "MYSQL BACKUP je zapnuty.";
}
sleep(2);
say "";

#### MYSQL SETUP STOP ####

#### Kontrola dostupnosti mysql prikazov START ####
my $mysql;
my $mysqldump;
my $gzip;
my $mysqltmpdir;
if(defined($backup_mysql) and $backup_mysql != 0){
if(system("which mysql >/dev/null 2>&1") == 0 and
system("which mysqldump >/dev/null 2>&1") == 0 and
system("which gzip >/dev/null 2>&1") == 0){
$mysql = `which mysql`;chomp($mysql);
$mysqldump = `which mysqldump`;chomp($mysqldump);
$gzip = `which gzip`;chomp($gzip);
$mysqltmpdir = `mktemp -d`;chomp($mysqltmpdir);
if(not defined($mysqltmpdir)){
$backup_mysql = 0;
say "Nepodarilo sa vytvorit tmp adresar pre mysqldump.";
say "Vypinam MYSQL backup a pokracujem v backupe suborov.";
}
}else{
$backup_mysql = 0;
say "Niektore MYSQL prikazy neboli najdene.";
say "Vypinam MYSQL backup a pokracujem v backupe suborov.";
}
}
#### Kontrola dostupnosti mysql prikazov STOP ####


#### BACKUP START ####
# Vytvorenie DUMPu MySQL
if(defined($backup_mysql) and $backup_mysql != 0){
#Ziskaj nazvy vsetkych databaz
say "Ziskavam názvy všetkých databáz.";
my @dbs = `$mysql -u $muser -h $mhost -p"$mpass" -Bse 'show databases'`; chomp(@dbs);
sleep(1);
print "Ukladám DUMP do ", $mysqltmpdir, "\n";
foreach my $db (@dbs){
if ($db ne "information_schema"){
`$mysqldump -u $muser -h $mhost -p"$mpass" $db | $gzip -9 > $mysqltmpdir/mysql-$db.gz`;
}
}
say "done";
}
say "";

## Pripojenie BACKUP disku ##
say "Pripájam BACKUP DISK";
sleep(1);
if(system("mount | grep $zal_disk >/dev/null 2>&1") != 0){
system("mount $zal_disk >/dev/null 2>&1");
if(system("mount | grep $zal_disk >/dev/null 2>&1") != 0){
say "Nepodarilo sa pripojiť backup disk: $zal_disk";
say "Skript sa ukončí";exit();
}else{
say "Pripojil som backup disk: $zal_disk";
}
}else{
say "BACKUP DISK je už pripojený.";
}
sleep(2);
say "";

# Vytvorenie a test zloziek pre backup suborov:
say "-----------------------------";
if(-d $zal_ciel . "/" . $zal_adresar){
$typ_zaloh = 'incr';
say "Typ zalohy súborov nastavený na INCREMENTAL";
}else{
mkdir $zal_ciel . "/" . $zal_adresar;
if(not -d $zal_ciel . "/" . $zal_adresar){
say "Nepodarilo sa vytvorit backup adresar: " . $zal_ciel . "/" . $zal_adresar;
say "Skript sa ukončí."; exit();
}
$typ_zaloh = 'full';
say "Typ zálohy súborov nastavený na FULL";
}
sleep(1);
say "";

# Vytvorenie a test zloziek pre backup databazy:
if(defined($backup_mysql) and $backup_mysql != 0){
if(-d $zal_ciel_sql . "/" . $zal_adresar){
$typ_zaloh_sql = 'incr';
say "Typ zalohy MySQL nastavený na INCREMENTAL";
}else{
mkdir $zal_ciel_sql . "/" . $zal_adresar;
if(not -d $zal_ciel_sql . "/" . $zal_adresar){
say "Nepodarilo sa vytvorit backup adresar: " . $zal_ciel_sql . "/" . $zal_adresar;
say "Skript sa ukončí."; exit();
}
$typ_zaloh_sql = 'full';
say "Typ zálohy MySQL nastavený na FULL";
}
sleep(1);
say "";
}

# Zaloha zoznamu balickov DEBIAN:
if(defined($debian_pkg_list) and $debian_pkg_list != 0){
say "-------------------------------";
say "Záloha zoznamu nainštalovaných balíčkov.";
system("dpkg --get-selections > $zal_ciel/$zal_adresar/balicky.txt");
say "done";
sleep (1);
say "";
}
# Zaloha zoznamu balickov CENTOS:
if(defined($centos_pkg_list) and $centos_pkg_list != 0){
say "-------------------------------";
say "Záloha zoznamu nainštalovaných balíčkov.";
system("rpm -qa > $zal_ciel/$zal_adresar/balicky.txt");
say "done";
sleep (1);
say "";
}

# Zaloha zlozky:
say "-------------------------------";
say "Zálohujem adresár ",$zal_co;
system("$zal_program $typ_zaloh --include-globbing-filelist $zal_incl_list $specialne_nastavenia $zal_co file:///$zal_cesta");
say "done";
sleep(2);
say "";

# Zaloha MySQL:
if(defined($backup_mysql) and $backup_mysql != 0){
say "-------------------------------";
say "Zálohujem MySQL databázu.";
system("$zal_program $typ_zaloh_sql $specialne_nastavenia_sql --allow-source-mismatch $mysqltmpdir file:///$zal_cesta_sql");
say "done";
sleep(2);
say "";
}
#### BACKUP STOP ####

#### CISTENIE PO BACKUPE ####
say "-------------------------------";
if($max_full_zaloh == 1){
say "Mažem zálohu súborov staršiu ako 1 týždeň.";
}elsif($max_full_zaloh == 2 or $max_full_zaloh == 3 or $max_full_zaloh == 4){
say "Mažem zálohu súborov staršiu ako ", $max_full_zaloh, " týždne.";
}else{
say "Mažem zálohu súborov staršiu ako ", $max_full_zaloh, " týždňov.";
}
system("rm -Rfv $zal_ciel/\$(date --date=\"$max_full_zaloh weeks ago\" +\"%V\");");
say "done";
sleep(2);
say "";

if(defined($backup_mysql) and $backup_mysql != 0){
say "-------------------------------";
if($max_full_zaloh == 1){
say "Mažem zálohu mysql staršiu ako 1 týždeň.";
}elsif($max_full_zaloh == 2 or $max_full_zaloh == 3 or $max_full_zaloh == 4){
say "Mažem zálohu mysql staršiu ako ", $max_full_zaloh, " týždne.";
}else{
say "Mažem zálohu mysql staršiu ako ", $max_full_zaloh, " týždňov.";
}
system("rm -Rfv $zal_ciel_sql/\$(date --date=\"$max_full_zaloh weeks ago\" +\"%V\");");
system("rm -rf $mysqltmpdir");
say "done";
sleep(2);
say "";
}

#### STATISTIKY START ####
say "-------------------------------";
say "----------ŠTATISTIKA-----------\n";
say "Začiatok: ",$zaloha_zaciatok;
say "Koniec: ",`date +"%F %T"`, "\n";
say "Veľkosť zálohy súborov: ",`du -sh $zal_cesta`;
if(defined($backup_mysql) and $backup_mysql != 0){
say "Veľkosť zálohy mysql: ",`du -sh $zal_cesta_sql`;
}
say "";
say "------------SERVER-------------";
say "Uptime: ",`uptime`;
say "-------------------------------";
say "----------BACKUP DONE----------";



CRON:
MAILTO={your email}
0 23 * * * time /root/backup/backup.pl

OUTPUT SKRIPTU - ukazka:

--------------------------
- BACKUP SKRIPT BY STIWY -
- 2012 -
--------------------------

Nastavujem premenné

MYSQL BACKUP je zapnuty.

Ziskavam názvy všetkých databáz.
Ukladám DUMP do /tmp/tmp.v6oDrloWuW
done

Pripájam BACKUP DISK
BACKUP DISK je už pripojený.

-----------------------------
Typ zalohy súborov nastavený na INCREMENTAL

Typ zalohy MySQL nastavený na INCREMENTAL

-------------------------------
Záloha zoznamu nainštalovaných balíčkov.
done

-------------------------------
Zálohujem adresár /var/vmail
Reading globbing filelist /root/backup/file-list.txt
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Aug 20 23:00:18 2012
--------------[ Backup Statistics ]--------------
StartTime 1345991024.26 (Sun Aug 26 16:23:44 2012)
EndTime 1345991024.82 (Sun Aug 26 16:23:44 2012)
ElapsedTime 0.56 (0.56 seconds)
SourceFiles 927
SourceFileSize 311667706 (297 MB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 0
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 104 (104 bytes)
Errors 0
-------------------------------------------------

done

-------------------------------
Zálohujem MySQL databázu.
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Mon Aug 20 23:03:12 2012
--------------[ Backup Statistics ]--------------
StartTime 1345991027.11 (Sun Aug 26 16:23:47 2012)
EndTime 1345991027.14 (Sun Aug 26 16:23:47 2012)
ElapsedTime 0.03 (0.03 seconds)
SourceFiles 5
SourceFileSize 176386 (172 KB)
NewFiles 1
NewFileSize 4096 (4.00 KB)
DeletedFiles 0
ChangedFiles 4
ChangedFileSize 172290 (168 KB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 5
RawDeltaSize 4412 (4.31 KB)
TotalDestinationSizeChange 4772 (4.66 KB)
Errors 0
-------------------------------------------------

done

-------------------------------
Mažem zálohu súborov staršiu ako 4 týždne.
done

-------------------------------
Mažem zálohu mysql staršiu ako 4 týždne.
done

-------------------------------
----------ŠTATISTIKA-----------

Začiatok: 2012-08-26 16:23:33
Koniec: 2012-08-26 16:23:53


Veľkosť zálohy súborov: 245M /media/backup/backup_mail/34

Veľkosť zálohy mysql: 608K /media/backup/backup_mysql/34


------------SERVER-------------
Uptime: 16:23:53 up 71 days, 7:27, 1 user, load average: 0.00, 0.00, 0.00

-------------------------------
----------BACKUP DONE----------

Přihlášení zákazníka

Nemáte ještě zákaznický účet? Registrace

Copyright © WEDOS, 2018

Facebook RSS