Создание резервной копии с использованием скрипта — различия между версиями

Материал из ЭЛЕСТА
Перейти к: навигация, поиск
Строка 42: Строка 42:
 
7. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог
 
7. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог
  
=Добавление прав доступа в папку backup для пользователя postgres=
+
=Поменяем пользователя папки backup=
 
+
  chown postgres ./backup
Для изменения прав доступа к файлу используется команда chmod. Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:
 
 
 
  chmod wXp имя-файла
 
где вместо символа w подставляется
 
либо символ u (т. е. пользователь, который является владельцем);
 
либо g (группа);
 
либо o (все пользователи, не входящие в группу, которой принадлежит данный файл);
 
либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).
 
Вместо X ставится:
 
либо + (предоставляем право);
 
либо – (лишаем соответствующего права);
 
либо = (установить указанные права вместо имеющихся),
 
Вместо p — символ, обозначающий соответствующее право:
 
r (чтение);
 
w (запись);
 
x (выполнение).
 
Вот несколько примеров использования команды chmod:
 
 
 
chmod a+x file_name
 
предоставляет всем пользователям системы право на выполнение данного файла.
 
 
 
chmod go-rw file_name
 
  
 
=Ошибки при выполнении скрипта=
 
=Ошибки при выполнении скрипта=

Версия 17:43, 1 февраля 2018

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

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

touch /etc/pgsql-backup.sh

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

vi /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]')"
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 $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

chown postgres ./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