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