Скрипт бэкапа всех баз 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