от Славей Караджов(6-02-2007)
рейтинг (14)
[ добре ]
[ зле ]
Вариант за отпечатване С публикуването на кода на сайта като свободен софтуер, публикувахме и няколко интересни скрипта за създаване на архиви на съдържанието на важни директории или бази от данни както и тяхното разпращане по други сървъри.
В тази статия ще се опитам да ви запозная с възможностите им.
От къде да свалите приложението
Има две възможности.
Едната е да свалите последната версия на 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 >>
|