Создание резервной копии с использованием скрипта — различия между версиями
Строка 6: | Строка 6: | ||
3. Запишем текст скрипта | 3. Запишем текст скрипта | ||
#!/bin/bash | #!/bin/bash | ||
− | + | USER=postgres | |
− | + | PASS=postgres | |
KEEP=14 | KEEP=14 | ||
DIR=/etc/backup | DIR=/etc/backup | ||
− | PGPASSWORD=$ | + | 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]')" |
for db in $DBS | for db in $DBS | ||
do | do | ||
Строка 23: | Строка 23: | ||
done | done | ||
FILE=$DIR/$db.$NOW-$(date +"%H"-"%M") | FILE=$DIR/$db.$NOW-$(date +"%H"-"%M") | ||
− | pg_dump -U $ | + | pg_dump -U $USER $db | gzip -c > $FILE |
done | done | ||
PGPASSWORD= | PGPASSWORD= | ||
Строка 29: | Строка 29: | ||
exit 0 | exit 0 | ||
− | <code> | + | <code>USER=postgres</code> - Имя пользователя<br> |
− | <code> | + | <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>NOW=$(date +"%Y-%m-%d")</code> - Формат записи даты и времени бэкапа<br> | ||
− | <code>pg_dump -U $ | + | <code>pg_dump -U $USER $db | gzip -c > $FILE</code> - Выходной файл с сжатием |
4. Сохраним его<br> | 4. Сохраним его<br> |
Версия 11:53, 28 ноября 2017
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 -U $USER $db | gzip -c > $FILE done PGPASSWORD= export PGPASSWORD exit 0
USER=postgres
- Имя пользователя
PASS=postgres
- Пароль для доступа к базе данных
KEEP=14
- Количество бэкапов, которое требуется сохранять
DIR=/etc/backup
- Каталог, куда сохранять бэкапы
NOW=$(date +"%Y-%m-%d")
- Формат записи даты и времени бэкапа
pg_dump -U $USER $db | gzip -c > $FILE
- Выходной файл с сжатием
4. Сохраним его
5. Дадим права на выполнение
chmod +x /etc/pgsql-backup.sh
6. Создадим каталог, куда будет делаться backup
mkdir /etc/backup
7. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог
Если возникает ошибка:
/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
Добавление прав доступа в папку backup для пользователя postgres
Для изменения прав доступа к файлу используется команда chmod. Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:
chmod wXp имя-файла
где вместо символа w подставляется
либо символ u (т. е. пользователь, который является владельцем); либо g (группа); либо o (все пользователи, не входящие в группу, которой принадлежит данный файл); либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).
Вместо X ставится:
либо + (предоставляем право); либо – (лишаем соответствующего права); либо = (установить указанные права вместо имеющихся),
Вместо p — символ, обозначающий соответствующее право:
r (чтение); w (запись); x (выполнение).
Вот несколько примеров использования команды chmod:
chmod a+x file_name
предоставляет всем пользователям системы право на выполнение данного файла.
chmod go-rw file_name