Очевидное решение
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
Может есть решение и проще, но я на него с ходу не наткнулся.
Комментариев нет:
Отправить комментарий