от Славей Караджов(6-02-2007)

рейтинг (14)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

С публикуването на кода на сайта като свободен софтуер, публикувахме и няколко интересни скрипта за създаване на архиви на съдържанието на важни директории или бази от данни както и тяхното разпращане по други сървъри.

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

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

Има две възможности.
Едната е да свалите последната версия на 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 >>