31.10.2011 22:27, Sergey Kobzar написав(ла):
On 10/31/11 21:14, Alexandr Kovalenko wrote:
Ну тогда мы говорим о разных системах.
Сергей, я бы на Вашем месте обратил внимание на то, в какую рассылку
Вы пишете.
ОК :)
Btw, под словом "система" имелась ввиду система бэкапов, а не ОС.
Буду благодарен, если кто из здесь присутствующих поделится своей
success story бэкапов MySQL на базе BSD + ZFS и не встанет ли оно буквой
Zю при высоких нагрузках/больших объемах.
Ну где-то так:
@monthly zfSnap -a 1y -p monthly_ utwig-sas/mysql utwig-sas/pgsql
@weekly zfSnap -a 1m -p weekly_ utwig-sas/mysql utwig-sas/pgsql
@daily zfSnap -a 1w -p daily_ utwig-sas/mysql utwig-sas/pgsql ; zfSnap
-d -p daily_ -p weekly_ -p monthly_ ; zfSnap -d -p daily_ -p weekly_ -p
monthly_
В планах ещё придумать скрипт который будет из снепшота делать архив
базы. Есть в ужасном состоянии скрипт который позволяет перекидывать
снепшоты в другую файловую систему (или на другой компьютер). Смысл
такой пересылки например в том, что при перекидывании в fs с
compression=gzip-9 и без recordsize=8k база занимает раза в два меньше
места.
В аттаче библиотека на шелле которая использовалась до этого, работает
исключительно с MyISAM, зато позволяет создавать жатые инкрементные
бекапы. Пример там же. Останавливает базу на пару минут.
--
Sphinx of black quartz judge my vow.
#!/bin/sh -
if [ -n "$LOGLIB" ]; then
CurrentUser=`whoami`
CurrentTask=`basename $0`
loggerOptions=`echo $LOGLIB|awk 'BEGIN{FS=":"}{print"-t "$1" -p "$2}'`
llog () {
if [ -n "$*" ]; then
if [ -n "$1" -a "$1" = '-' ]; then
shift
if [ -n "$*" ]; then
sed -l "s|^
*|[$CurrentUser:$CurrentTask] $* |"
else
sed -l "s|^
*|[$CurrentUser:$CurrentTask] |"
fi
else
echo "[$CurrentUser:$CurrentTask] $*"
fi
else
sed -l "s|^ *|[$CurrentUser:$CurrentTask] |"
fi | logger $loggerOptions
}
else
llog () {
:
}
fi
#!/bin/sh -
PATH=$PATH:/usr/local/bin
MyLibDir=`dirname $0`
LOGLIB='price:info'
. "$MyLibDir/loglib.sh"
BackupDirectory='/home/backup/db'
TablesToBackup='/var/spool/mysql/etc/TablesToBackup'
if [ -f "$TablesToBackup" ]; then
BackupTables=`cat $TablesToBackup | grep -v '^#'`
fi
backupWarmUp() {
(
echo "warming up incremental backup"
mkdir -p "$BackupDirectory/current"
for dir in $BackupTables; do
if [ -d "/var/db/mysql/$dir" ]; then
rsync -rtWS --chmod=Dug+x,u+rw,g+r,o-rwx
--delete --exclude "*.bz2" "/var/db/mysql/$dir" "$BackupDirectory/current"
else
echo "directory /var/db/mysql/$dir not found"
fi
done
) | llog -
}
backupStopMysql() {
(
echo "stopping mysql"
/usr/local/etc/rc.d/mysql-server stop >/dev/null
) | llog -
}
backupComplete() {
(
echo "completing incremental backup"
for dir in $BackupTables; do
if [ -d "/var/db/mysql/$dir" ]; then
rsync -rtWS --chmod=Dug+x,u+rw,g+r,o-rwx
--delete --exclude "*.bz2" "/var/db/mysql/$dir" "$BackupDirectory/current"
else
echo "directory /var/db/mysql/$dir not found"
fi
done
) | llog -
}
backupStartMysql() {
(
echo "starting mysql"
/usr/local/etc/rc.d/mysql-server start </dev/null >/dev/null
2>&1
) | llog -
}
backupSpawnCopies() {
(
DAY=`date "+%u"`
DAYOFMONTH=`date "+%e"`
WEEK=`date "+%W"`
MONTH=`date "+%m"`
cd "$BackupDirectory/current"
echo "compressing tables"
for dir in $BackupTables; do
make -C "$BackupDirectory/current/$dir" -f
"$MyLibDir/compress.make" -j2 -s
done
echo "creating daily backup"
rm -rf "$BackupDirectory/daily/$DAY"
mkdir -p "$BackupDirectory/daily/$DAY"
find . -type d -print0 | xargs -0 -Ifoo mkdir -p
"$BackupDirectory/daily/$DAY/foo"
find . -type f -regex '.*\.bz2$' -print0 | xargs -0 -Ifoo ln
foo "$BackupDirectory/daily/$DAY/foo"
if [ "$DAY" -eq "1" ]; then
echo "creating weekly backup"
rm -rf "$BackupDirectory/weekly/$WEEK"
mkdir -p "$BackupDirectory/weekly/$WEEK"
find . -type d -print0 | xargs -0 -Ifoo mkdir -p
"$BackupDirectory/weekly/$WEEK/foo"
find . -type f -regex '.*\.bz2$' -print0 | xargs -0
-Ifoo ln foo "$BackupDirectory/weekly/$WEEK/foo"
fi
if [ "$DAYOFMONTH" -eq "1" ]; then
echo "creating monthly backup"
rm -rf "$BackupDirectory/monthly/$MONTH"
mkdir -p "$BackupDirectory/monthly/$MONTH"
find . -type d -print0 | xargs -0 -Ifoo mkdir -p
"$BackupDirectory/monthly/$MONTH/foo"
find . -type f -regex '.*\.bz2$' -print0 | xargs -0
-Ifoo ln foo "$BackupDirectory/monthly/$MONTH/foo"
fi
) | llog -
}
# $Id: compress.make 94 2010-10-17 11:15:48Z arcade $
AllFiles != find . -type f -not -name '*.bz2'
CompressedFiles = ${AllFiles:C/$/.bz2/g}
all: ${CompressedFiles}
${CompressedFiles}: ${@:C/\.bz2$//g}
bzip2 -kf9 $?
#!/bin/sh -
# $Id: mysqlBackup 12 2008-08-19 14:30:56Z arcade $
PATH=$PATH:/usr/local/bin
MyLibDir=`dirname $0`
LOGLIB='price:info'
. "$MyLibDir"/loglib.sh
. "$MyLibDir"/mysqlBackup.sh
backupWarmUp
backupStopMysql
backupComplete
backupStartMysql
backupSpawnCopies