Скрипт бэкапа postgres(native,docker)

Скрипт бэкапа всех баз postgres

DATE_Y=`/bin/date '+%Y'`
DATE_M=`/bin/date '+%m'`
DATE_D=`/bin/date '+%d'`
BACKUP_DIR="/bup/pg_bases/$DATE_Y/$DATE_M/$DATE_D"
mkdir -p ${BACKUP_DIR}/
chmod 777 -R $BACKUP_DIR;
/usr/bin/find $BACKUP_DIR -type d -mtime +7 -print0 | /usr/bin/xargs -0 -t /bin/rm -rf
for DB_NAME in `su  postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
 do
     echo "CREATING DIR ${BACKUP_DIR}/${DB_NAME}"
     mkdir -p $BACKUP_DIR/${DB_NAME};
     chmod 777 -R ${BACKUP_DIR}/${DB_NAME};
     su  postgres -c "/usr/bin/pg_dump   -Fc --no-owner --verbose  ${DB_NAME} | gzip >  ${BACKUP_DIR}/${DB_NAME}/${DB_NAME}.gz"
     chmod 777 -R $BACKUP_DIR;
     su  postgres -c "/usr/bin/pg_dump   -Fc -s -f $BACKUP_DIR/${DB_NAME}/only_shema ${DB_NAME}"
 done

Создадим базу данных с кастомными LC_COLLATE LC_CTYPE и пользовалелем

CREATE DATABASE "db72_test" WITH OWNER "db72_test" ENCODING 'UTF8'  LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0;
###Восстановление бд
#echo "Удаляем старую бд, предварительно обрубив соединения"
#su  postgres -c "psql -qAt -c 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ${DBNAMEPG};'"
#su  postgres -c "psql -qAt -c 'select pg_terminate_backend(pid) from pg_stat_activity where datname = 'web';'"
#su  postgres -c "psql -qAt -c 'DROP DATABASE ${DBNAMEPG};'"
#su  postgres -c "psql -qAt -c 'SELECT EXTRACT(EPOCH FROM (now() - pg_last_xact_replay_timestamp()))::INT;"
#/bin/sleep 3;
#su  postgres -c "psql -qAt -c 'CREATE USER user_remote with password 'Cbrt32456';"
#echo "Создаем пустую базу данных ${DBNAMEPG}"
#su  postgres -c "psql -qAt -c 'CREATE DATABASE ${DBNAMEPG};'"
#echo "Импортируем базу данных  ${DBNAMEPG} и создаем индексы - примерное время 15 минут"
#su  postgres -c "pg_restore -v -e -d ${DBNAMEPG} ${DBNAMEPG}"

Скрипт восстановления всех баз postgres

#!/bin/bash
BACKUP_DIR="/db/dumps/04"
DBNAMEPGS="dbname1 dbname2 dbname3"
for DBNAMEPG in $DBNAMEPGS
do
cd $BACKUP_DIR/${DBNAMEPG}
/bin/gunzip ${DBNAMEPG}
chmod 777 -R $BACKUP_DIR
su  postgres -c "psql -qAt -c 'DROP DATABASE ${DBNAMEPG};'"
su  postgres -c "psql -qAt -c 'CREATE DATABASE ${DBNAMEPG};'"
echo "Импортируем базу данных  ${DBNAMEPG} и создаем индексы - примерное время 15 минут"
su  postgres -c "pg_restore -v -e -d ${DBNAMEPG} ${DBNAMEPG}"
done

Бэкап и базы данных в каталог

Шаг 1 Бэкап

su  postgres -c "pg_dump DBNAME -Fd -j8 -v -f  /var/lib/postgresq/backup.dir"

Бэкап базы данных из контейнера

docker exec -u postgres `docker ps | grep postgres | awk '{print $NF}'` bash -lc 'pg_dump --format custom db74_rassvet_release' > dump_format-custom_db74_rassvet_release.dump

Восстановление базы в контейнер
У вас должна быть создана база предварительно

docker exec -i -u postgres `docker ps | grep postgres | awk '{print $NF}'` pg_restore  --verbose --exit-on-error  --dbname=${DB_NAME} < ${DB_NAME}.dump

Добавить комментарий

Войти с помощью: 

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.