bash скрипт для бэкапа mysql postgresql баз данных

bash скрипт для бэкапа mysql и postgresql чтобы не забыть, плюс может кому еще пригодится.
(для настройки например bacula или rsnapshot … )

Условия:
— Mysql root пользователь должен иметь безпарольный доступ с сервера в mysql (/root/.my.cnf)
(или в скрипт можно добавить использование пароля через ключи -u root -p»Пароль»)
— postgres пользователь на сервере может без пароля заходить в postgresql консоль
(в Debian, Centos,Ubuntu по умолчанию это работает, в freebsd вместо postgres использовать pgsql пользователя и -d template1)

итак скриптище:

#!/bin/bash

PG_U="postgres"
DIR="/opt/backup"
PG_TEMP="/opt/.pg_temp"
MYSQL_LIST=`/usr/bin/mysql -sNe "show databases;" | grep -v information_schema | grep -v performance_schema`
PG_LIST=`/usr/bin/sudo -u $PG_U -i /usr/bin/psql -q -c "SELECT datname FROM pg_database WHERE datistemplate = false;" -A -t`

if [ ! -d $DIR ] ; then mkdir -p $DIR; fi
if [ ! -d $PG_TEMP ] ; then mkdir -p $PG_TEMP; chown $PG_U $PG_TEMP; fi

for d in $MYSQL_LIST
do
mysqldump $d > $DIR/$d.sql
done

if [ ! -d $PG_TEMP ] ; then mkdir -p $PG_TEMP; chown $PG_U $PG_TEMP; fi
for d in $PG_LIST
do
/usr/bin/sudo -u $PG_U -i pg_dump $d > $PG_TEMP/$d.psql
done
mv $PG_TEMP/*psql $DIR
rm -rf $PG_TEMP

Чтобы в имена бэкапов добавить дату и время добавлем в скрипт:

B_DATE=$(date +"%Y-%m-%d")
B_TIME=$(date +"%H-%M")

А в команде дампа переименовываем имя дампа соответственно:

$DIR/$d.$B_DATE.$B_TIME.sql
$PG_TEMP/$d.$B_DATE.$B_TIME.psql

для добавления сжатия gzip:

mysqldump $d | gzip -c > $DIR/$d.$B_DATE.$B_TIME.sql.gz
/usr/bin/sudo -u $PG_U -i pg_dump $d | gzip -c > $PG_TEMP/$d.$B_DATE.$B_TIME.psql.gz

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>