четверг, 21 мая 2009 г.

Создание резервной копии mysql

Необходимо создать полную резервную копию mysql.
Очевидное решение

mysqldump --all-databases

неудобно тем, что все данные сваливаются в один файл и при необходимости сходу восстановить одну базу врядли получится.
Исходя из этого был написан скрипт на bash, сохраняющий каждую базу в отдельном файле.
#!/bin/bash

#default values
DATE=`date +%F`
TIME=`date +%H:%M`
HOST=127.0.0.1
USER=user
PASS=pass

HD_NAME=`hostname`.`hostname -d`
BACKUP_DIR="/backup"
ARCH_NAME=mysql-$HD_NAME-$DATE

touch $BACKUP_DIR/tfile-$$ || exit
rm $BACKUP_DIR/tfile-$$

TMPDIR="/tmp/mdump-$$"
mkdir $TMPDIR || exit

if [ "$PASS" ]; then PASS="-p$PASS"; fi
if [ "$USER" ]; then USER="-u $USER"; fi

BASES=`echo "show databases" | mysql $USER $PASS -N`
if [ ! "$BASES" ]; then exit; fi

for BASE in $BASES; do mysqldump --opt --host=$HOST $USER $PASS $BASE > $TMPDIR/$BASE
done

if [ -f $BACKUP_DIR/$ARCH_NAME.tar.gz ]; then ARCH_NAME="$ARCH_NAME"_"$TIME"; fi

cd $TMPDIR && tar -c $BASES | gzip -f9 > $BACKUP_DIR/$ARCH_NAME.tar.gz && echo $ARCH_NAME created.
rm $TMPDIR/* && rmdir $TMPDIR

Может есть решение и проще, но я на него с ходу не наткнулся.

Комментариев нет:

Отправить комментарий