2008-08-12

[BASH]Skrypt do robienia backupów MySQL'a.

Zamieszczam tutaj skrypt mojego autorstwa do robienia kopii zapasowych baz danych w MySQL'u. Pozdrowienia dla TQM, który to dał mi pomysł by stworzyć taki skrypt.

Skrypt pobiera 3 argumenty. Pierwszym z nich jest ścieżka do katalogu gdzie mają zostać zrobione kopie zapasowe. Drugi argument to użytkownik do bazy danych. Trzeci, jego hasło. W podanym katalogu, który podamy w pierwszym argumencie jest tworzony następny, którego nazwą jest aktualna data według formatu ROK-MIESIĄC-DZIEŃ. Następnie w tym katalogu są tworzone pliki, o nazwach takich, jak konkretne bazy danych. Po stworzeniu wszystkich baz, ich kopie są kompresowane za pomocą programu gzip. Polecam równiez program bzip2, jednak TQM odradził, ponieważ według niego bzip2 za długo kompresuje.

#!/bin/bash
echo "Backup databases by Nikow."
#Pobranie danych inicjujacych.
BACKUPSDIR=$1
USER=$2
PASS=$3
DATA=`date +"%Y-%m-%d"`

#Katalogi
if [ ! -d $BACKUPSDIR ]
then
echo "Katalog ${BACKUPSDIR} istnieje."
mkdir -v $BACKUPSDIR
if [ "$?" != "0" ]
then
echo "ERROR!"
exit 1
fi
fi

mkdir ${BACKUPSDIR}/${DATA} >& /dev/null
cd ${BACKUPSDIR}/${DATA}

#Wyciaganie baz.
BAZY=`echo "show databases;" | /usr/bin/mysql --silent -u${USER} -p${PASS}`

#Dump
for BAZA in $BAZY; do
echo "Zrzucanie bazy ${BAZA}..."
/usr/bin/mysqldump --add-drop-database --add-drop-table \
--complete-insert --create-options \
--single-transaction -u${USER} -p${PASS} \
${BAZA} > ${BAZA}.sql
done;

#Kompresja
echo "Kompresja baz..."
nice -15 gzip -9v *
echo "KONIEC!"

2 komentarze:

TQM pisze...

Za dlugo kompresuje a okienko czasowe na backup zazwyczaj jest dosc male... zwlaszcza jak backup calosci leci hmmm 16h a robimy 2 kopie dziennie. Zwyczajnie kwestia gustu i mozliwosci :-)

javaman pisze...

myślę, ze dobrym pomyslem byloby umozliwienie np. wybrania bazy do backupniecia, podania jej nazwy jako argument. Pamietaj ze na jednym serwerze moze byc ich kilka, a nie wszystkie musimy chciec backupowac.