Создание резервной копии с использованием скрипта

Материал из ЭЛЕСТА
Перейти к: навигация, поиск

Скрипт запускать от postgres

Создание файла скрипта

Создаем файл под root

1. Создадим файл

touch /etc/pgsql-backup.sh

2. Откроем файл для редактирования

vi /etc/pgsql-backup.sh

или

nano /etc/pgsql-backup.sh

3. Запишем текст скрипта

#!/bin/bash
 USER=postgres
 PASS=postgres
 KEEP=14
 DIR=/etc/backup
 PGPASSWORD=$PASS
 export PGPASSWORD
 NOW=$(date +"%Y-%m-%d")
 DBS="$(psql -U $USER -lt | awk '{print $1}' |grep -vE '^\||^-|^List|^Name|template[0|1]|postgres')"
 for db in $DBS
   do
     BACKUPS=`find $DIR -name $db.*.gz |wc -l|sed 's/\ //g'`
     while [ $BACKUPS -ge $KEEP ]
       do
        ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
        BACKUPS=`expr $BACKUPS - 1`
       done
     FILE=$DIR/$db.$NOW-$(date +"%H"-"%M")
     pg_dump --column-inserts --attribute-inserts -U $USER -Fc $db | gzip -c > $FILE.gz
   done
 PGPASSWORD=
 export PGPASSWORD
 exit 0

USER=postgres - Имя пользователя
PASS=postgres - Пароль для доступа к базе данных
KEEP=14 - Количество бэкапов, которое требуется сохранять
DIR=/etc/backup - Каталог, куда сохранять бэкапы

4. Сохраним его
5. Дадим права на выполнение

chmod +x /etc/pgsql-backup.sh

6. Создадим каталог, куда будет делаться backup

 mkdir /etc/backup

7. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог

Изменим владельца для папки backup на postgres

chown postgres /etc/backup

Запуск скрипта

1. Заходим под postgres

su postgres

2. Выполняем скрипт

/etc/pgsql-backup.sh

После выполнения скрипта резервная копия сохранилась в папку:

/etc/backup

Ошибки при выполнении скрипта

/bin/sh^M: bad interpreter: No such file or directory
/bin/sh^M: плохой интерпретатор: Нет такого файла или каталога

Суть проблемы в том, что под на платформе Windows редакторы добавляют символ «возврата каретки» CR/LF. Не все редакторы под Linux виндовый перенос строки умеют отображать, но он там есть, о чем свидетельствует сообщение об ошибке.

Удаляем возврат каретки с использованием tr:

cat name_old.sh | tr -d '\r' > name_new.sh