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

Материал из ЭЛЕСТА
Перейти к: навигация, поиск
(Добавление прав доступа в папку backup для пользователя postgres)
 
(не показано 25 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
Скрипт запускать от '''postgres'''
  
1. Создадим файл скрипта
+
=Создание файла скрипта=
 +
Создаем файл под root
 +
 
 +
1. Создадим файл
 
  touch /etc/pgsql-backup.sh
 
  touch /etc/pgsql-backup.sh
 
2. Откроем файл для редактирования
 
2. Откроем файл для редактирования
 
  vi /etc/pgsql-backup.sh
 
  vi /etc/pgsql-backup.sh
3. Поместим текст
+
или
  #!/bin/bash
+
nano /etc/pgsql-backup.sh
  PGUSER=postgres
+
3. Запишем текст скрипта
  PGPASS=postgres
+
  <syntaxhighlight lang=shell>#!/bin/bash
 +
  USER=postgres
 +
  PASS=postgres
 
  KEEP=14
 
  KEEP=14
 
  DIR=/etc/backup
 
  DIR=/etc/backup
  PGPASSWORD=$PGPASS
+
  PGPASSWORD=$PASS
 
  export PGPASSWORD
 
  export PGPASSWORD
 
  NOW=$(date +"%Y-%m-%d")
 
  NOW=$(date +"%Y-%m-%d")
  DBS="$(psql -U $USER -lt |awk '{ print $1}' |grep -vE '^-|^List|^Name|template[0|1]')"
+
  DBS="$(psql -U $USER -lt | awk '{print $1}' |grep -vE '^\||^-|^List|^Name|template[0|1]|postgres')"
 
  for db in $DBS
 
  for db in $DBS
 
   do
 
   do
     BACKUPS="find $DIR -name '$db.*.gz' | wc -l | sed 's/\ //g'"
+
     BACKUPS=`find $DIR -name $db.*.gz |wc -l|sed 's/\ //g'`
 
     while [ $BACKUPS -ge $KEEP ]
 
     while [ $BACKUPS -ge $KEEP ]
 
       do
 
       do
 
         ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
 
         ls -tr1 $DIR/$db.*.gz | head -n 1 | xargs rm -f
         BACKUPS='expr $BACKUPS - 1'
+
         BACKUPS=`expr $BACKUPS - 1`
 
       done
 
       done
 
     FILE=$DIR/$db.$NOW-$(date +"%H"-"%M")
 
     FILE=$DIR/$db.$NOW-$(date +"%H"-"%M")
     pg_dump -U $PGUSER $db | gzip -c > $FILE
+
     pg_dump --column-inserts --attribute-inserts -U $USER -Fc $db | gzip -c > $FILE.gz
 
   done
 
   done
 
  PGPASSWORD=
 
  PGPASSWORD=
 
  export PGPASSWORD
 
  export PGPASSWORD
 
  exit 0
 
  exit 0
 +
</syntaxhighlight>
  
<code>PGUSER=postgres</code> - Имя пользователя<br>
+
<code>USER=postgres</code> - Имя пользователя<br>
<code>PGPASS=postgres</code> - Пароль для доступа к базе данных<br>
+
<code>PASS=postgres</code> - Пароль для доступа к базе данных<br>
 
<code>KEEP=14</code> - Количество бэкапов, которое требуется сохранять<br>
 
<code>KEEP=14</code> - Количество бэкапов, которое требуется сохранять<br>
 
<code>DIR=/etc/backup</code> - Каталог, куда сохранять бэкапы<br>
 
<code>DIR=/etc/backup</code> - Каталог, куда сохранять бэкапы<br>
<code>NOW=$(date +"%Y-%m-%d")</code> - Формат записи даты и времени бэкапа<br>
 
<code>PGBASES="jupiter"</code> - Имя базы данных<br>
 
<code>BACKUPS=`find $DIR -name "$PGBASES.*.gz" | wc -l | sed 's/\ //g'`</code><br>
 
<code>FILE=$DIR/$PGBASES.$NOW-$(date +"%T").backup.gz</code><br>
 
<code>pg_dump -U $PGUSER $PGBASES | gzip -c > $FILE</code> - Выходной файл с сжатием
 
 
   
 
   
 
4. Сохраним его<br>
 
4. Сохраним его<br>
Строка 46: Строка 48:
 
7. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог
 
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: bad interpreter: No such file or directory
 
  /bin/sh^M: плохой интерпретатор: Нет такого файла или каталога
 
  /bin/sh^M: плохой интерпретатор: Нет такого файла или каталога
Строка 54: Строка 69:
 
Удаляем возврат каретки с использованием tr:
 
Удаляем возврат каретки с использованием tr:
  
  cat name_old.sh | tr -d '\r' > name_new.sh
+
  <syntaxhighlight lang=shell>cat name_old.sh | tr -d '\r' > name_new.sh</syntaxhighlight>
 
 
==Добавление прав доступа в папку backup для пользователя postgres==
 
 
 
Для изменения прав доступа к файлу используется команда chmod. Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:
 
 
 
[user]$ chmod wXp имя-файла
 
где вместо символа w подставляется
 
 
 
либо символ u (т. е. пользователь, который является владельцем);
 
либо g (группа);
 
либо o (все пользователи, не входящие в группу, которой принадлежит данный файл);
 
либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).
 
 
 
Вместо X ставится:
 
 
 
либо + (предоставляем право);
 
 
 
либо – (лишаем соответствующего права);
 
 
 
либо = (установить указанные права вместо имеющихся),
 
 
 
Вместо p — символ, обозначающий соответствующее право:
 
 
 
r (чтение);
 
 
 
w (запись);
 
 
 
x (выполнение).
 
 
 
Вот несколько примеров использования команды chmod:
 
 
 
[user]$ chmod a+x file_name
 
предоставляет всем пользователям системы право на выполнение данного файла.
 
 
 
[user]$ chmod go-rw file_name
 

Текущая версия на 12:54, 6 июля 2018

Скрипт запускать от 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