каждый день создается архив базы mysql
при этом старый архив удаляется
таким образом за месяц получаем месячный архив базы
Ну вот месяц закончился
сегодня например 1 февраля
скрипт проверяет что сегодня 1-й день февраля и должен не создать новый архив а переименовать файл архива от 31 декабря
вот тут и песня
md=`date +%b-%Y`
mv `find /backup/mysql -name 'tem_*' -type f -cmin + 1000` /backup/mysql/tem-$mdmv ругается говорит что не указан целевой файл
Подскажите как правильно слепить имя файла
надо из tem_31-Янв-2011.tar.bz2 получить tem_Янв-2011.tar.bz2
> md=`date +%b-%Y`
> mv `find /backup/mysql -name 'tem_*' -type f -cmin + 1000` /backup/mysql/tem-$mdfind точно находит то, что нужно? Условие для него составлено очень уж сомнительно.
"-cmin + 1000" - конструкция явно синтаксически неверная (в линуксе, по крайней мере, у вас-то какая ОСь?). Если имелось в виду "-cmin +1000", то тоже ничего хорошего: "файлы, чей статус изменился больше 1000 минут назад" - под это условие может попасть куча файлов.
>> md=`date +%b-%Y`
>> mv `find /backup/mysql -name 'tem_*' -type f -cmin + 1000` /backup/mysql/tem-$md
> find точно находит то, что нужно? Условие для него составлено очень уж
> сомнительно.
> "-cmin + 1000" - конструкция явно синтаксически неверная (в линуксе, по крайней
> мере, у вас-то какая ОСь?). Если имелось в виду "-cmin +1000",
> то тоже ничего хорошего: "файлы, чей статус изменился больше 1000 минут
> назад" - под это условие может попасть куча файловУсловие работает просто изумительно
проверил
НУ и сам продвинулся в процедуре формирования названия файла
md=`date -r ` | awk '{print substr($0, 4, 4)}'
Вот таким макаром можно выловить название месяца в переменную
а потом просто
mv `find /backup/mysql -name 'tem_*' -type f -cmin + 1000` /backup/mysql/tem-${md}
Вот как то так
Всем спасибо за внимание
> надо из tem_31-Янв-2011.tar.bz2 получить tem_Янв-2011.tar.bz2по крону
# эвридэйчик в 04:00
00 4 * * * root mysqldump -uroot -pgod --all-databases | bzip2 -z9 > /backup/mysql/tem_`date +%d-%b-%Y`.bz2# каждого 1-ого числа в 03:00 (GMT = 00:00 если чё)
00 3 1 * * root mysqldump -uroot -pgod --all-databases | bzip2 -z9 > /backup/mysql/tem_`date +%b-%Y`.bz2
>> надо из tem_31-Янв-2011.tar.bz2 получить tem_Янв-2011.tar.bz2
> по крону
> # эвридэйчик в 04:00
> 00 4 * * * root mysqldump -uroot -pgod --all-databases | bzip2
> -z9 > /backup/mysql/tem_`date +%d-%b-%Y`.bz2
> # каждого 1-ого числа в 03:00 (GMT = 00:00 если чё)
> 00 3 1 * * root mysqldump -uroot -pgod --all-databases | bzip2
> -z9 > /backup/mysql/tem_`date +%b-%Y`.bz2Спасибо Действительно красиво и не заморочено
Тока 1 числа каждого месяца надо сделать backup
потом его переименовать
а в самой базе отчистить таблицы
> ...., а в самой базе отчистить таблицыЭто уже третья переменная, про неё Вы в начале не писали. :)
Тогда можно ежедневные делать со 2-ого числа
00 4 2-31 * * root mysqldump ....
>> ...., а в самой базе отчистить таблицы
> Это уже третья переменная, про неё Вы в начале не писали. :)
> Тогда можно ежедневные делать со 2-ого числа
> 00 4 2-31 * * root mysqldump ....Господа ! Все налабал и протестил Вот такое й скомный результат Может кому и понадобиться
#Create mysql backup
#!/bin/bash
#function create_file_name build name file with month archive
function create_month_archive(){
F_D=""
F_T=""
FILE_DATE=""
F_T=$(echo `find /backup/mysql -name 'pet_*' -type f -cmin +1000 -exec ls {} \;`)
F_D=$(echo `date -r $F_T` | awk '{print substr( $0, 5, 3) substr( $0, 25, 4)}')
echo $F_D
FILE_NAME=pet-$F_D.tar.bz2
/etc/init.d/mysqld stop;
sleep 30;
FILE_DATE=$(echo `date +%d-%Y`)
tar -cjf /backup/mysql/pet_${FILE_DATE}.tar.bz2 /var/lib/mysql/test/*;
find /backup/mysql -name 'pet_*' -type f -cmin +1000 -exec ls -la {} \;
echo "DELETE OLD"
find /backup/mysql -name 'pet_*' -type f -cmin +1000 -exec rm -rf {} \;
echo "RENAME"
mv /backup/mysql/pet_${FILE_DATE}.tar.bz2 /backup/mysql/$FILE_NAME;
/etc/init.d/mysqld start;
sleep 30;
mysql test < /usr/local/sbin/mysql_backup.sql;
echo "Month archive cteate success. Base traffics was refresh!" > /usr/local/sbin/mysql_backup.txt;
}function create_incremental_archive(){
/etc/init.d/mysqld stop;
sleep 30;
FILE_DATE=$(echo `date +%d-%Y`)
tar -cjf /backup/mysql/pet_${FILE_DATE}.tar.bz2 /var/lib/mysql/test/*;
find /backup/mysql -name 'pet_*' -type f -cmin +1000 -exec ls -la {} \;
echo "DELETE OLD"
find /backup/mysql -name 'pet_*' -type f -cmin +1000 -exec rm -rf {} \;
/etc/init.d/mysqld start;
sleep 30;
echo "Yesterday rchive cteate success." > /usr/local/sbin/mysql_backup.txt;
FILE_DATE="";
}CUR_DAY=$(echo `date +%d`)
if [ $CUR_DAY -eq "01" ]
then {
create_month_archive;
}
else
{
create_incremental_archive;
}
fi