perl-скрипт для автоматизации бэкапов mysql

Главные вкладки

Аватар пользователя nleo nleo 25 февраля 2009 в 21:18

Собрался наконец автоматизировать некоторые рутинные операции. Скрипт предназначен для ручного запуска из консоли.

#!/usr/bin/perl

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(time);

$date = sprintf("%d.%02d.%02d_%02d-%02d-%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
print "Date is $date\n";

[user=databases]databases[/user]  = ("bd1", "bd2");# имена баз данных которые надо забэкапить
$mysql_user = 'username';
$mysql_pass = 'pass';
$path       = '/home/www/mysite.ru';
$archive_name = "$date.tar.gz";
$http_link = 'http://mysite.ru';

#создаем катаклог, в качестве имени - текущяя дата
system "mkdir '$date'";

#делаем дампы каждой БД
foreach $database ([user=databases]databases[/user]){
  print "Backuping database: $database... ";
  system "mysqldump -u $mysql_user -p$mysql_pass $database > $date/$database.sql";
  print "Done.\n";
}

#архивиреем дампы и перемещаем в папку, которую до этого создали
system "tar -czf $archive_name $date";
system "mv $archive_name $date";
#копируем архив в корень нашего домена и предлагаем его скачать
system "cp $date/$archive_name $path/$archive_name";
print "You can download archive: $http_link/$archive_name\n";
# после нажатия enter, архив из корня домена будет удален и удалены промежуточные файлы с дампами баз данных.
<>;
system "rm $path/$archive_name";
system "rm $date/*.sql";
print  "Cleared. Tasks done.\n";

почему perl? я влюблен в его синтаксис, жаль, что друпал не на перле)

PS а подсветка не предусмотренна? ( < code type="perl" > )

Комментарии

Аватар пользователя nleo nleo 25 февраля 2009 в 21:40

спасибо, хорошая информация

но мое решение именно для меня лучше, потому что оно целиком делает то, что мне нужно не больше не меньше)

единстевенное наверно надо --add-drop-table добавить

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 25 февраля 2009 в 21:41

Все проще. создаем в mysql пользователя backup который имеет доступы к базам на чтение.
и пишем такой скрипт:

#!/bin/sh
backupuser='backupuser'
backuppasswd='тут идет пароль но мы ваем его не покажем'
mysqldump='/usr/bin/mysqldump'
#this function makes mysqldump of the given database to the given directory
# and makes chmod and chown of file to the given group
make_dump(){
    _database=$1;
    _directory=$2;
    _user=$3;
    _group=""$4;
    _mod=""$5;
    _path="${_directory}/${_database}.sql";
    _command="${mysqldump} --skip-extended-insert -u${backupuser} -p${backuppasswd} ${_database}";
    ${_command}  > ${_path};
    if [ "a${_user}" != "a" ] && [ "a${_group}" != "a" ]; then
        chown ${_user}:${_group}  ${_path}
    fi
    if [ "a${_mod}" != "a" ]; then
        chmod ${_mod} ${_path}
    fi
}

# а теперь просто вызываем функцию которую нарисовали с нужными параметрами.
#my sites
mypath=/home/brainstorm
make_dump brainstorm ${mypath} brainstorm www-data 640
make_dump insourcing ${mypath} brainstorm www-data 640
make_dump projectpier ${mypath} brainstorm www-data 640
#remstroy
make_dump remstroy /mnt/brainstorm/projects/remstroy brainstorm www-data 640
#timon
make_dump timon /mnt/timon/backup timon www-data 640

вот собственно и все. надо еще базу бекапить и класть в каталог пользователя - добавляем еще строку make_dump

Аватар пользователя nleo nleo 26 февраля 2009 в 0:55

точно! что-то я недодумался, пошел искать rsync для виндоус

если есть ссылки про настройку бекапа на домашний комп под windows c сайта кидайте