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