Создание резервной копии с использованием скрипта — различия между версиями
(→Поменяем пользователя папки backup) |
(→Создание файла скрипта) |
||
Строка 7: | Строка 7: | ||
2. Откроем файл для редактирования | 2. Откроем файл для редактирования | ||
vi /etc/pgsql-backup.sh | vi /etc/pgsql-backup.sh | ||
+ | или | ||
+ | nano /etc/pgsql-backup.sh | ||
3. Запишем текст скрипта | 3. Запишем текст скрипта | ||
#!/bin/bash | #!/bin/bash |
Версия 14:24, 2 февраля 2018
Скрипт запускать от postgres
Создание файла скрипта
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]')" 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. При выполнении скрипта будет сохраняться резервная копия схемы данных в указанный каталог
Поменяем пользователя на postgres для папки backup
chown postgres ./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