Создание резервной копии с использованием скрипта — различия между версиями
(не показано 40 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | Скрипт запускать от '''postgres''' | |
− | 1. | + | |
− | touch /etc/pgsql-backup | + | =Создание файла скрипта= |
− | + | Создаем файл под root | |
− | vi /etc/pgsql-backup | + | |
− | + | 1. Создадим файл | |
− | #!/bin/bash | + | touch /etc/pgsql-backup.sh |
− | + | 2. Откроем файл для редактирования | |
− | + | vi /etc/pgsql-backup.sh | |
+ | или | ||
+ | nano /etc/pgsql-backup.sh | ||
+ | 3. Запишем текст скрипта | ||
+ | <syntaxhighlight lang=shell>#!/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]|postgres')" | |
− | + | for db in $DBS | |
− | |||
− | |||
do | do | ||
− | ls -tr1 $DIR/$ | + | 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 | done | ||
− | |||
− | |||
− | |||
PGPASSWORD= | PGPASSWORD= | ||
export PGPASSWORD | export PGPASSWORD | ||
exit 0 | exit 0 | ||
+ | </syntaxhighlight> | ||
− | <code> | + | <code>USER=postgres</code> - Имя пользователя<br> |
− | <code> | + | <code>PASS=postgres</code> - Пароль для доступа к базе данных<br> |
− | <code>KEEP=14</code> - | + | <code>KEEP=14</code> - Количество бэкапов, которое требуется сохранять<br> |
<code>DIR=/etc/backup</code> - Каталог, куда сохранять бэкапы<br> | <code>DIR=/etc/backup</code> - Каталог, куда сохранять бэкапы<br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | 4. Сохраним его<br> | |
− | + | 5. Дадим права на выполнение | |
− | chmod +x /etc/pgsql-backup | + | chmod +x /etc/pgsql-backup.sh |
− | + | 6. Создадим каталог, куда будет делаться backup | |
mkdir /etc/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: | ||
+ | |||
+ | <syntaxhighlight lang=shell>cat name_old.sh | tr -d '\r' > name_new.sh</syntaxhighlight> |
Текущая версия на 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