LINUX-BG   Адрес : http://www.linux-bg.org
Правене на архиви по "лесния начин"
От: Славей Караджов
Публикувана на: 6-02-2007
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=devs&key=390254519
С публикуването на кода на сайта като свободен софтуер, публикувахме и няколко интересни скрипта за създаване на архиви на съдържанието на важни директории или бази от данни както и тяхното разпращане по други сървъри.

В тази статия ще се опитам да ви запозная с възможностите им.

От къде да свалите приложението

Има две възможности.
Едната е да свалите последната версия на maintainer пакета от
http://openfmi.net/frs/?group_id=177
Другата е да свалите последна SVN версия. Това може да направите с командата:
svn checkout https://svn.openfmi.net/linux-bg/trunk/maintainer/

Изисквания за работа с приложението

Скриптове използват следните външни програми: cp, mv, tar, mysql, scp.
Допълнително се нуждаете от модула Expect и Net::FTP ако искате да използвате SSH и FTP за сваляне или копиране.
Тези модули може да свалите от CPAN. (perl -MCPAN -e shell).

Примери

Примери как може да използвате maintainer.pl

maintainer.pl е създаден за да улесни задачата по архивирането на база данни, файл или директория и копирането на архивите на отдалечен сървър посредством SSH или FTP.

maintainer.pl се стартира с два аргумента от командния ред - "източник" и "крайна цел" И двата аргумента използват този формат: [encaps:]protocol://user:password@base/details Вижте примерите по-долу за подробности

Пример 1

Честа задача в наши дни е копиране на съдържанието на mysql база от данни и архивирането на това съдържание във файл. Това може да се направи със следната команда:
$ maintainer.pl mysql://username:password@host/database/ tar:///local/file.tgz

Пример 1.1

Тъй като стартирането на тази команда от командния ред или от вашия crontab може разкрие тайна информация, като вашата парола за mysql например, на другите потребители, то е добре секретната информация да се запише в config.pm файла.
Това става по следния начин. Отваряте config.pm файла и в него добавяте следния ред:
$CONFIG{'DB_PASS'} = 'my_db_pass'; След което използвайте [DB_PASS] в командния ред, вместо истинската парола.
Скриптът maintainer.pl автоматично ще замени [DB_PASS] със зададената от вас стойност. В случая това е "my_db_pass".

След като сте добавили вашата парола в конфигурационния файл, може да изпълните командата по следния начин:
$ maintainer.pl mysql://username:[DB_PASS]@host/database/ tar:///local/file.tgz

Вижте файла config.pm за подробности.

Пример 2

Пазенето на архивите на базата от данни на същия хард диск на която се намира тя, или пазенето на архивите на дадена директория, не е добра идея, защото ако хард диска се развали, то губите и архивите. Затова е добра идея да копирате вашите архиви на отдалечен сървър.
Това може да се направи по следния начин:

$ maintainer.pl mysql://username:password@host/database/ tar:ftp://user:[FTP_PASS]@server/full/path/to/file

В този пример вземаме информацията от mysql, архивираме я с "tar" и посредством FTP изпращаме архива на отдалечен сървър.

Обработващи под-команди

Може би сте забелязали, че "tar:ftp://user:[FT..." не изглежда като това което сте очаквали "ftp://user:[FT...". Командата "tar" преди "ftp" е командата която се грижи за обработването на информацията преди изпращането й с FTP.

Пример 2.2

Може да изпълните командата по-следния начин, ако искате да изпратите вашите архиви на отдалечен сървър посредством SSH за по-голяма сигурност:

$ maintainer.pl mysql://username:password@host/database/ tar:ssh://user:[SSH_PASS]@server/full/path/to/file
Забележка относно сигурността:
За предпочитане е да НЕ слагате root пароли за SSH, а да използвате ключове вместо това. Разбира се вие сами решавате.

Пример 3

Досега ви демонстрирахме как база може да се архивира и изпрати на отдалечен сървър, сега ще ви покажем как директория може да се архивира.
$ maintainer.pl file:///important/directory/ tar:ssh://user:[SSH_PASS]@server/full/path/to/file
$ maintainer.pl file:///important/directory/file tar:ssh://user:[SSH_PASS]@server/full/path/to/file

Поддържани "протоколи"

В момента може да използвате: file, mysql, ftp, ssh било то за описване на "източник" или за описване на "крайна цел". tar може да използвате само за "крайна цел" или като команда обработваща информацията преди обработването и от протокола грижещ се за "крайната цел".

Примери как може да използвате cleaner.pl

cleaner.pl е скрипт който изтрива файлове отговарящи на определен шаблон и по-стари от определен период.
Скриптът използва 3 аргумента:
1 - шаблона на файла
2 - тип време
3 - стойност време

Пример 1: Ако искате да изтриете всички файлове в директорията /tmp по-стари от 4-ри месеца:
$ cleaner.pl "/tmp/*" months 4
Забележка: Кавичките пред и след шаблона са ЗАДЪЛЖИТЕЛНИ.
За тип време може да посочите следните стойности:
timestamp - третира 3-ият аргумент като секунди след 1970-та година.
date - смята 3-ият аргумент за дата. Датата се задава във формат YYYY:MM:DD:HH:II
years - търси за файлове по-стари от "стойност време" години.
months - търси за файлове по-стари от "стойност време" месеци.
days - търси за файлове по-стари от "стойност време" дни.
hours - търси за файлове по-стари от "стойност време" часове.
minutes - търси за файлове по-стари от "стойност време" минути.

Автоматизиране на нещата

Лесно може да автоматизирането правенето на архивите с maintainer.pl и cleaner.pl като ги добавите към вашия crontab.

Ето и няколко "истински" примера от crontab на linux-bg.org сървъра:
 # ----------------------------------------------------------------------------------
 
 # Създаване на копия на базата всеки ден
 15 4 * * *  /path/to/script/maintainer.pl 'mysql://[DB_USER]:[DB_PASS]@[DB_HOST]/[DB_DATABASE]' 'tar:///path/to/backup/lbg-db-[__YMD__].sql.tgz' 1>/dev/null 2>>/path/to/backup/backup.log
 
 # Изпращане на седмично копие на базата посредством SSH на отдалечен сървър
 7  5 * * 5  /path/to/script/maintainer.pl 'file:///path/to/backup/lbg-db-[__YMD__].sql.tgz' 'ssh://[SSH_USER]:[SSH_PASS]@[REMOTE_SERVER]/full/path/to/backups/lbg-db-[__YMD__].sql.tgz' 1>/dev/null 2>> /path/to/backup/backup.log
 
 # Създаване на копие на директорията с данните
 23 5 * * 5,2  /path/to/script/maintainer.pl 'file:///path/to/data/data/' 'tar:///path/to/backup/lbg-data-[__YMD__].tgz' 1>/dev/null 2>>/path/to/backup/backup.log
 
 # Изпращане на копието веднъж в седмицата на отдалечен сървър.
 1  6 * * 3 /path/to/script/maintainer.pl 'file:////path/to/backup/lbg-data-[__YMD__].tgz' 'ssh://[SSH_USER]:[SSH_PASS]@[REMOTE_SERVER]/full/path/to/backups/lbg-data-[__YMD__].tgz' 1>/dev/null 2>>/path/to/backup/backup.log
 
 # Изтриване на файлове по-стари от два месеца на локалната машина
 15 14 * * 6 /path/to/script/cleaner.pl "/path/to/backup/lbg-*.tgz" months 2
 
 # ----------------------------------------------------------------------------------
 
Това е. Забавлявайте се :)

Забележка: * maintainer.pl и cleaner.pl са част LBG проекта: http://www.linux-bg.org.
* Сайтът на проекта се намира на адрес: http://openfmi.net/projects/linux-bg/

<< Прост и ефективен начин за backup с rsync | Програмиране графичен интерфейс (GUI) с Lazarus и freepascal >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 1 wallclock secs ( 0.17 usr + 0.02 sys = 0.19 CPU)