Backup базы postgresql

Резервное копирование базы данных

Бэкап одной базы данных

В примере ниже, мы сделаем резервную копию базы данных под названием , принадлежащей пользователю и сохраним её в файл :

pg_dump -U bosha thebosharu -f thebosharu.sql

Если вы работаете с базой данных не под тем же пользователем, под которым работаете в системе, то pg_dump спросит пароль к базе данных и после его успешного ввода создаст указанный файл содержащий SQL команды для создания необходимой структуры и копирования данных.

Вот часть дампа моей базы данных, чтобы вы понимали что в нем находится:

--
-- Name: auth_user; Type: TABLE; Schema: public; Owner: bosha; Tablespace:
--

CREATE TABLE auth_user (
    id integer NOT NULL,
    username character varying(250) NOT NULL,
    password character varying(250),
    email character varying(250),
    first_name character varying(250),
    last_name character varying(250),
    middle_name character varying(250),
    authenticated boolean,
    active boolean,
    is_admin boolean
);


ALTER TABLE auth_user OWNER TO bosha;

--
-- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: bosha
--

CREATE SEQUENCE auth_user_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE auth_user_id_seq OWNER TO bosha;

--
-- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: bosha
--

ALTER SEQUENCE auth_user_id_seq OWNED BY auth_user.id;

--
-- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: bosha
--

COPY auth_user (id, username, password, email, first_name, last_name, middle_name, authenticated, active, is_admin) FROM stdin;
1       test    pbkdf2sha1$sfadfadafda$sfadfadf10019sdfadfad0101010dsfadf0202022      \N                              f       f       f
\.

Так же можно передать ключ , чтобы pg_dump запаковал базу данных в tar:

pg_dump -U bosha thebosharu --format=t -f thebosharu.sql.tar

Бэкап всех баз данных

Для того, чтобы сделать резервную копию всех баз данных, нужно использовать другую утилиту — pg_dumpall.

Права доступа могут быть настроены у всех по разному, поэтому бэкап всех баз данных лучше делать из под пользователя .

Зайдем под ним:

su - postgres

И выполним:

pg_dumpall > all_databases.sql

Бэкап всех баз данных будет содержаться в файле .

Крайне желательно убедится, что все нужные базы данных были копированы. Для этого все из под того же пользователя postgres посмотрим список всех баз данных:

psql -l

В моем случае было три базы данных:

postgres~$ psql -l
                                      List of databases
     Name      |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges     
---------------+----------+----------+-------------+-------------+---------------------------
 thebosharu    | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tcpostgres             +
               |          |          |             |             | postgres=CTcpostgres    +
               |          |          |             |             | thebosharu=CTcpostgres
 testdb1       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tcpostgres             +
               |          |          |             |             | postgres=CTcpostgres    +
               |          |          |             |             | testdb1=CTcpostgres
 testdb2       | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tcpostgres             +
               |          |          |             |             | postgres=CTcpostgres    +
               |          |          |             |             | testdb2=CTcpostgres
(3 rows)

Теперь удостоверимся, что все перечисленные базы попали в дамп:

bash:~$ grep "^connect" all.sql
\connect thebosharu
\connect testdb1
\connect testdb2

Бэкап определенной таблицы

pg_dump --table auth_user -U bosha thebosharu -f auth_user_table.sql

Для бэкапа определенной таблицы используется параметр и следом за ним названием таблицы. Если в базе данных указанная таблица есть в разных схемах, то её можно указать используя параметр .

Распараллеливание

Когда я начинаю разбираться с какой-либо проблемой, первым делом читаю документацию и исходный код. У Postgres отличная документация, где в том числе ясно и подробно расписаны опции командной строки. Одна из опций команды pg_restore определяет количество параллельных потоков, которые запускаются во время выполнения наиболее затратных по времени задач, загрузки данных, создания индексов или ограничений.

Документация по pg_restore говорит, что лучше начинать с количества потоков, равного количеству ядер. У моей виртуальной машины 4 ядра, но я хотел поэкспериментировать с разными значениями этой опции.

Общее время 32 минуты 7 секунд (25,6 минут на восстановление в dev-окружении, что на 3% быстрее, чем однопоточный запуск pg_restore).

Хорошо, немного выиграли. Можем ли мы еще ускориться?

Общее время 28 минут 34 секунды (22,1 минуты на восстановление в dev-окружении, что на 14% быстрее, чем с двумя потоками).

Отлично! Четыре потока быстрее двух на 14%. Да данный момент в dev-окружении мы ускорились с 32,5 до 22,1 минуты: время улучшено на 32%!

Я решил выяснить, к чему приведет дальнейшее увеличение количества ядер.

Общее время 23 минуты 17 секунд (16,8 на восстановление в dev-окружении, что на 24% быстрее четырех потоков).

Итак, увеличив количество потоков до удвоенного количества ядер, нам удалось уменьшить время с 22,1 до 16,8 минут. Сейчас мы ускорились на 49%, что просто чудесно.

А еще можно что-нибудь выжать?

Общее время 22 минуты 35 секунд (16,1 минуты на восстановление в dev-окружении, что на 4%, чем 8 потоков).

Указав 12 потоков, мы еще немного ускорились, но CPU виртуальной машины во время восстановления был загружен настолько, что никакие другие действия в системе выполнить было невозможно. В этом вопросе я решил остановиться на 8 потоках (количество ядер * 2).

Автоматический бэкап PostgreSQL в Linux

О том как делать автоматические резервные копии в PostgreSQL рассказано в статье Automated Backup on Linux. Скрипты из этой статьи всем хороши, кроме того, что если их прописать в cron, то ничего бэкапиться не будет. А происходит так из-за того, что нигде не указывается пароль пользователя PostgreSQL от имени которого делается бэкап.

Для того чтобы эти скрипты заработали в автоматическом режиме нужно в самый конец pg_backup.config добавить: # Set PGUSER and PGPASSWORD PGUSER=”postgres” PGPASSWORD=”password” export PGUSER PGPASSWORD # End

Естественно, вместо пользователя postgres можно использовать любого нужного пользователя, а вместо password нужно указать пароль этого пользователя.

А в целях безопасности в самом конце pg_backup.sh нужно вставить: # Unset PGUSER and PGPASSWORD PGUSER=”” PGPASSWORD=”” export PGUSER PGPASSWORD # End

Теперь можно сделать файлы исполняемыми: chmod u+x pg_backup.sh pg_backup_rotated.sh

(для проверки работоспособности нужно выполнить bash pg_backup.sh)

Прописать их в cron пользователя postgres (на примере Ubuntu): sudo crontab -u postgres -e

В файл нужно добавить строки: SHELL=/bin/bash 15 3 * * * /path/to/script/pg_backup.sh > /dev/null 2>&1

Надо напоминать, что /path/to/script/ — это путь к директории с файлом?

Теперь ждём 03:15 утра и проверяем работоспособность.

Настраиваемый формат

Углубившись в документацию по pg_dump, я обнаружил, что pg_dump создает простой текстовый SQL-файл. Затем мы сжимаем его gzip-ом, чтобы сделать меньше. У Postgres есть настраиваемый (custom) формат, который по умолчанию использует zlib для сжатия. Я подумал, что можно будет добиться выигрыша в скорости создания бэкапа, сразу упаковывая данные в Postgres вместо направления простого текстового файл в gzip.

Поскольку psql не понимает настраиваемый формат, мне пришлось перейти на pg_restore.

Общее время 32 минуты 54 секунды (26,4 минуты на восстановление в dev-окружении).

Я оказался прав, считая, что создание бэкапа будет быстрее, если нам не придется направлять вывод в gzip. К сожалению, восстановление из настраиваемого формата на локальной машине не ускоряет процесс. Пришлось придумывать что-нибудь еще.

Просто и сердито. Архивирование (backup) типовых конфигураций 1С 8.2, 8.3

После эксплуатации различных «бесплатных» обработок и скриптов решил написать свой cmd-файл для ежедневного архивирования баз 1С.
Работает на конфигурациях, где есть процедуры «ЗавершитьРаботуПользователей» и «РазрешитьРаботуПользователей» (т.е. во всех типовых, в нетиповые данные модули можно скопировать из типовых).
Сохраняет файлы как локально так и на удаленном файловом сервере. Автоматически удаляет старые архивы и копирует на удалённый сервер отсутствующие.
Расписание задается установкой соответствующего задания (запуска cmd-файла по времени) в планировщике задач Windows.
Для борьбы с зависшими сеансами, рекомендуется настроить в режиме конфигуратора параметры информационной базы: «Время засыпания пассивного сеанса» и «Время завершения спящего сеанса».

Скрипт для резервирования БД

#!/bin/bash
 
# Backup  PostgreSQL
 
DIR="/var/log/BACKUP/db_backup_mbill"
TIMENAME=`date +%Y-%m-%d.%H.%M`
PG_DUMP="/usr/bin/pg_dump"
SUDO="/usr/bin/sudo"
GZIP="/bin/gzip"
ExcludeTable="-T cdr"
DBNAME=mbillcz5054
BACKUP=$DIRpsql-$DBNAME-backup-$TIMENAME-db.sql.gz
 
echo "$SUDO -u postgres $PG_DUMP $DBNAME $ExcludeTable | $GZIP > $BACKUP";
 
$SUDO -u postgres $PG_DUMP $DBNAME $ExcludeTable | $GZIP > $BACKUP;
 
echo `/usrbindu -hsx $BACKUP`;

Запускаем еженедельно при помощи Anacron (если установлено) или Использование планировщика cron в Linux, для этого создаем символическую ссылку в директорию /etc/cron.weekly

# ln -s /scripts/psql_backup_zabbix /etc/cron.weekly/

Создание резервных копий

Пользователь и пароль

Если резервная копия выполняется не от учетной записи postgres, необходимо добавить опцию -U с указанием пользователя:

pg_dump -U dmosk -W users > /tmp/users.dump

* где dmosk — имя учетной записи; опция W потребует ввода пароля.

Сжатие данных

Для экономии дискового пространства или более быстрой передачи по сети можно сжать наш архив:

pg_dump users | gzip > users.dump.gz

Скрипт для автоматического резервного копирования

PGPASSWORD=password export PGPASSWORD pathB=/backup dbUser=dbuser database=db

find $pathB \( -name “*-1.*” -o -name “*-?.*” \) -ctime +61 -delete pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date “+%Y-%m-%d”).sql.gz

* где password — пароль для подключения к postgresql; /backup — каталог, в котором будут храниться резервные копии; dbuser — имя учетной записи для подключения к БУБД. * данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После при помощи утилиты pg_dump будет выполнено подключение и резервирование базы db. Пароль экспортируется в системную переменную на момент выполнения задачи.

Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:

3 0 * * * /scripts/postgresql_dump.sh

* наш скрипт будет запускаться каждый день в 03:00.

На удаленном сервере

Если сервер баз данных находится на другом сервере, просто добавляем опцию -h:

pg_dump -h 192.168.0.15 users > /tmp/users.dump

* необходимо убедиться, что сама СУБД разрешает удаленное подключение. Подробнее читайте инструкцию Как настроить удаленное подключение к PostgreSQL.

Дамп определенной таблицы

Запускается с опцией -t или –table= :

pg_dump -t students users > /tmp/students.dump

* где students — таблица; users — база данных.

Размещение каждой таблицы в отдельный файл

Также называется резервированием в каталог. Данный способ удобен при больших размерах базы или необходимости восстанавливать отдельные таблицы. Выполняется с ипользованием ключа -d:

pg_dump -d customers > /tmp/folder

* где /tmp/folder — путь до каталога, в котором разместяться файлы дампа для каждой таблицы.

Только схемы

Для резервного копирования без данных (только таблицы и их структуры):

pg_dump –schema-only users > /tmp/users.schema.dump

Использование pgAdmin

Данный метод хорошо подойдет для компьютеров с Windows и для быстрого создания резервных копий из графического интерфейса.

Запускаем pgAdmin – подключаемся к серверу – кликаем правой кнопкой мыши по базе, для которой хотим сделать дамп – выбираем Резервная копия:

В открывшемся окне выбираем путь для сохранения данных и настраиваемый формат:

При желании, можно изучить дополнительные параметры для резервного копирования:

После нажимаем Резервная копия – ждем окончания процесса и кликаем по Завершено.

Возможные ошибки

Input file appears to be a text format dump. please use psql.

Причина: дамп сделан в текстовом формате, поэтому нельзя использовать утилиту pg_restore.

Решение: восстановить данные можно командой psql <имя базы> < <файл с дампом> или выполнив SQL, открыв файл, скопировав его содержимое и вставив в SQL-редактор.

No matching tables were found

Причина: Таблица, для которой создается дамп не существует. Утилита pg_dump чувствительна к лишним пробелам, порядку ключей и регистру.

Решение: проверьте, что правильно написано название таблицы и нет лишних пробелов.

Причина: Утилита pg_dump чувствительна к лишним пробелам.

Решение: проверьте, что нет лишних пробелов.

Aborting because of server version mismatch

Причина: несовместимая версия сервера и утилиты pg_dump. Может возникнуть после обновления или при выполнении резервного копирования с удаленной консоли.

Решение: нужная версия утилиты хранится в каталоге /usr/lib/postgresql/<version>/bin/. Необходимо найти нужный каталог, если их несколько и запускать нужную версию. При отсутствии последней, установить.

No password supplied

Причина: нет системной переменной PGPASSWORD или она пустая.

Решение: либо настройте сервер для предоставление доступа без пароля в файле pg_hba.conf либо экспортируйте переменную PGPASSWORD (export PGPASSWORD или set PGPASSWORD).

Неверная команда \

Причина: при выполнении восстановления возникла ошибка, которую СУБД не показывает при стандартных параметрах восстановления.

Решение: запускаем восстановление с опцией -v ON_ERROR_STOP=1, например:

psql -v ON_ERROR_STOP=1 users < /tmp/users.dump

Теперь, когда возникнет ошибка, система прекратит выполнять операцию и выведет сообщение на экран.

Дополнительная информация по изучению PostgreSQL

Обучение PostgreSQL. Полный курс по работе с базой данных PostgreSQL!

Курс включает в себя все инструменты: управление доступом, резервное копирование, репликация, журналирование, работа со статистикой, способы масштабирование, а также работа PostgreSQL в облаках AWS, GCP, Azure и в Kubernetes.
Проверь свои знания — пройди тестирование

  • Резервное копирование и восстановление в PostgreSQL Предположим что у нас есть postgresql в режиме потоковой репликации. master-сервер и hot-standby готовый заменить погибшего товарища. При плохом развитии событий, нам остается только создать trigger-файл и переключить наши приложения на работу с новым мастером. Однако, возможны ситуации когда вполне законные изменения были сделаны криво написанной миграцией и попали как на мастер, так и на подчиненный сервер. Например, были удалены/изменены данные в части таблиц или же таблицы были вовсе удалены. С точки зрения базы данных все нормально, а с точки зрения бизнеса — катастрофа. В таком случае провозглашение горячего hot-standby в мастера, процедура явно бесполезная… Для предостережения такой ситуации есть, как минимум, два варианта… использовать периодическое резервное копирование средствами pg_dump;использовать резервное копирование на основе базовых копий и архивов WAL.
  • Резервное копирование баз данных в СУБД PostgreSQL (On-line backup)

Как восстановить файл дампа PostgreSQL в базы данных Postgres?

Все админы делятся на 2 категории

— те которые уже делают бэкап

и те которые ещё не делают.

PostgreSQL является современной системой управления базами данных, часто используемая для хранения и обработки информации, связанной с веб-сайтами или сторонними приложениями

У любой базы данных, важно вовремя реализовать резервное копирование, чтобы избежать возможную потерю данных

В этом посте я постараюсь рассказать о некоторых способах, которыми вы можете сделать резервную копию PostgreSQL. Для тестов будем использовать Ubuntu 12,04 VPS с PostgreSQL 9.1. Для большинства современных дистрибутивов и последних версии PostgreSQL мои советы будут актуальны.

Создание резервной копии PostgreSQL при помощи pg_dump

PostgreSQL включает в себя утилиту под названием «pg_dump», которая позволяет сделать дамп базы данных в файл. Утилита консольная, синтаксис достаточно простой:

pg_dump name_of_database > name_of_backup_file

Команда должна быть запущена под пользователем с привилегиями на чтение базы данных.

Как вариант мы можем войти через sudo под пользователем «рostgres» и выполнить команду:

sudo su — postgres pg_dump postgres > postgres_db.bak

«pg_dump» — это «полноценный» клиент PostgreSQL, т.е. при необходимости её можно запустить с удаленной машины, если имеются соответствующие разрешения к базе данных.

Расширенный синтаксис выглядит следующим образом:

pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file

Как восстановить дампы  pg_dump в PostgreSQL

Чтобы восстановить резервную копию, созданную pg_dump, необходимо перенаправить файл с дампом в стандартный ввод psql:

psql empty_database < backup_file

Эта операция не создает новую базу данных. Об этом необходимо позаботиться заранее.

Для примера, создадим новую базу данных под названием «restored_database», а затем развернем дамп под названием «database.bak»:

createdb -T template0 restored_database psql restored_database < database.bak

Пустая база данных должна быть создана при помощи шаблона «template0«. Так же нам необходимо убедиться в наличии пользователя с необходимыми правами на создаваемую базу, в противном случае нам придется создать нового:

createuser test_user psql restored_database < database.bak

По умолчанию, PostgreSQL будет пытаться продолжить восстановление базы данных, даже если он сталкнется с ошибками.

По многим причинам так делать не стоит. Мы можем явно указать PostgreSQL на остановку, в случае любой ошибки:

psql —set ON_ERROR_STOP=on restored_database < backup_file

С данной опцией мы получим частично восстановленную базу данных.

Можно попробовать восстановить весь дамп в одну транзацию, т.е. бекап будет или полностью восстановлен или не восстановлен совсем. Данный режим может быть задан, с помощью опций -1 или —single-transaction для psql.

psql -1 restored_database < backup_file

При этом любая ошибка приведет к откату процесса восстановления, что может потребовать достаточно продолжительного времени.

Резервное копирование и восстановление всех баз данных в PostgreSQL

Чтобы сэкономить время, можно сделать резервную копию всех баз данных в вашей системе, при помощи утилиты «pg_dumpall»:

pg_dumpall > backup_file

Похожим способом можно восстановить базы данных:

psql -f backup_file postgres

Резервные копии являются важным аспектом при любой работе с данными

К счастью, PostgreSQL включает утилиты, необходимые для эффективного резервного копирования важной информации. Как с любым видом резервного копирования, важно регулярно проверять свои резервные копии

В качестве дополнения скрипт, который создает резервную копию с меткой времени и сохраняет последние 14 резервных копий:

ls -t *.sql | sed -e ‘1,13d’ | xargs -d ‘\n’ rm echo Done at `date +\%Y-\%m-\%d_\%T` pg_dump dbname —username=dbuser > `date +\%Y-\%m-\%d_\%T`.sql

Вы можете оставить комментарий ниже.

Ярлыки

11.1

11.1.1 trial

11.10

12.04

14.04

16.04

17.04

17.10

18.04

1С + postgresql под windows

1С:Отчетность

1С:Предприятие 7.7

1c

20.04

32 бит

3proxy

9.6.2

автономный сервер

админ

администрирование

анализ сервера

архивирование

безопсность

березка

веб доступ

время

второй кластер

выгнать пользователей

госзакупки

диагностика

диагностика postgresql

документация

Дорошкевич

журнал регистрации

Завершение работы пользователей

зависимости postgresql

запуск postgresql

зафиксировать postgresql

ибп

интересно

камин

книги

Конфигурация сервера

КриптоПро

лицензии

лицензия

логи

локальная сеть

минисервер 1с

Моё рабочее

мой сервер

настройка дампов

непрерывное архивирование

обновление 1с

обновление ядра

обновление postgresql

ограничение 1Гб

ОКБ

Олег Харин

ОПО

оптимизация

ошибка

пароли

переименовать хост

перенос win lin

печать

Поиск пакетов

Потоковая репликация

программная лицензия

размер базы

размер таблиц

РИБ

сборка postgresql

сервер хранилища

сессии

скачать дистрибутивы

скрипт

скрипт wal

справочник

спутник

спящие сеансы

сравнение cpu

ссылки

статический ip

тест

тестирование

Тестирование и исправление конфигурации

тестовый сервер

технологический журнал

тюнинг postgresql

удаление 1с

удаление postgresql

управление серверами

установка 1с

установка 2 сервера 1с

файловый режим

фиас

флешка

фрагментация памяти

холодный backup

Шпаргалка PostgreSQL

штрих-коды

энергосбережение

acme.sh

aksusbd

Aladdin Monitor

alt linux

alternative downloads

amcheck

ammyy admin

apache2

apc

apparmor

apport

Asterisk

astra

astra linux

astra lxc

astra lxd

atop

audio

autologon

autovacuum

B360M

B365M

backup

Bash-скрипты

bridge-utils

bug

cache_hit_ratio

cadaver

canon

centos

Certbot

Certificate

checkdb

chromium

chromium-gost

cloak

clonezilla

cpu

cpufreqd

cron

crontab

cryptcp

Crypto-Pro

cryptopro

CryptSync

cups-pdf

curl

cwRsync

Cygwin

cygwin-rsyncd

dante

db2

debian

debian 10

desktop

disk

Dns Leak Test

DO

docker

docker-compose

DokuWiki

dump

elastix

etersoft

excel

fail2ban

Failover

fedora

files

FileZilla

fio

firefox

fragster

freenx

ftp

ghostscript

GIMP

git

gitlab

gnome

gnome-tweak-tool

gost

governor

gpg

GPT to MBR

haproxy

hasp

hasp & lxc

hdd

hold

host

hostname

hostnamectl

Hyper-Threading

i7

i7-7700

icmp

intel

intel graphics 630

Intel Kaby Lake

ip

iperf

IPSec

iptables

journalctl

juju

Junction

kerberos

kvm

L2TP

Let’s Encrypt

linux

live-cd

LMNoIpServer

Load Average

log

LPD

LVM

lxc

lxc in lxd

lxd

lxd & virtualbox

lxd 1c

lxd backup

lxd haproxy

lxd nextcloud

lxd resource control

lxd vps

lxd-p2c

macvlan

Mandos

mariadb

mc

MediaWiki

mining

mint

MobaXterm

mp3

mssql

multipath

mysql

MZ1LB960HAJQ-00007

net.netfilter.nf_conntrack_max

nethasp

nethasp.ini

network

NetworkManager

nextcloud

Nginx

NoMachine

ntp

numactl

numlock

nut

NVMe

nvOC

ondemand

openconnect

OpenSSH

OpenSSL

openvpn

ops

orel. orel docer

pdf

performance

pg_basebackup

pg_catalog.pg_statistic

pg_controldata

pg_dump

pg_dump в каталог

pg_probackup

pg_probackup одна база

pg_probackup upgrade

pg_repack

pg_resetxlog

pgadmin4

pgBackRest

pgbench

PGConf

PgTune

phpvirtualbox

Playonlinux

plink

posfix

postfix

postgrespro

postgrespro-std-11

postgresql

PostgreSQL Configurator

postgresql port

postgresql ssl

postgresql win

postgresql.conf

proxmox

pulseaudio

pure-ftpd

python

QtdSyn

RAID

ramdisk

ramfs

rancher

ras

rclone

reverse-proxy

rphost

rsync

Rufus

samba

Samsung SSD

sandisk

Sar

screen

server

Shadowsocks

smartctl

smartmontools

smbclient

snap

snapshot

spice

squid

ssd

ssh

ssh к флешке

ssh по сертификату

ssl

stats_temp_directory

strongSwan

stubby

stunnel

Supermicro

swap

swappiness

sysctl

sysctl.conf

systemd

tap

TCmalloc

teamviewer

telegram

temp_tablespaces

terminal server

test

test Тестовый сервер

test ssd

test2

test3

timedatectl

timezona

tint2

tmpfs

TRIM

ubuntu

ubuntu 18.04

ubuntu 20.04

ufo

ufw

unity

UNIX sockets

ureadahead

usb

v2ray-plugin

vacuum

vacuumdb

vbox

vino

virsh

virt

virt-manager

virt-viewer

virtualbox

vnc

vsftpd

wal

wd my cloud

web

webdav

wget

windows

windows server

windows vs linux

wine

WinSetupFromUSB

WireGuard

wordpress

x11vnc

xming

xrdp

xubuntu

xubuntu-desktop

xvfb

yandex-disk

youtube

youtube-dl

zabbix

zfs

zram

Оффтоп: несколько слов по безопасности

  1. Ваша система имеет последние обновления
  2. Вы не работаете от пользователя ‘root’, вместо этого у вас создан персонифицированный (то есть, для каждого сотрудника, которому требуется доступ на сервер, свой) пользователь в группе sudo (в нашем случае, назовем его alex)
  3. При подключении по SSH вы не используете авторизацию по логину/паролю, применяя вместо этого доступ по ключу

  4. В конфиге ssh включена опция доступа по ключу, кроме этого порт доступа ssh изменен со стандартного на рандомный (макроподстановка в скрипте ниже) в диапазоне от 1024 до 57256 (т.к. часто сканеры портов для экономии ресурсов проверяют лишь стандартные порты)

  5. Доступ root-а по ssh — запрещен, доступ по паролю по ssh — запрещен

Восстановление и распаковка одной командой

Первое, что пришло в голову, — просто направить запакованный файл напрямую в с помощью zcat, которую можно считать аналогом cat для сжатых файлов. Эта команда распаковывает файл и выводит его в , который, в свою очередь, можно направить в .

Общее время: 33 минуты 31 секунда (26,3 минут на восстановление в dev-окружении, что на 20% быстрее).

Отлично, нам удалось ускорить процесс на 16%, выиграв 20% при восстановлении. Поскольку ввод/вывод был основным ограничивающим фактором, отказавшись от распаковки файла на диск, мы сэкономили более 6 минут. Но мне показалось, что этого недостаточно. Терять на восстановлении базы 26 минут — все равно плохо. Я должен был придумать что-то еще.

Восстановление бекапа

Проверка работоспособности бекапирования

Перед тем, как выводить нашу инсталляцию foo в продакшен, необходимо убедиться в работоспособности настроенной системы бекапов. Проверка, очевидно, должна состоять из двух частей:

  1. Базовый бекап отправлен на сервер бекапов
  2. WAL-файлы отправляются на сервер бекапов

П.1 проверяется так: на сервере бекапов заходим в папку /var/lib/postgresql/backups/foo/base и убеждаемся, что она содержит файлы base.tar.gz и pg_wal.tar.gz:

Чтобы быстро — без долгого времени наблюдения за системой — проверить п.2, вернемся в пункт настройки PostgreSQL и поменяем таймаут архивирования (archive_timeout) на 60 секунд, затем рестартуем PostgreSQL. Теперь при наличии изменений в базе WAL-файлы будут архивироваться не реже, чем раз в минуту. Далее в течение некоторого времени (3-5 минут) будем любым (безопасным) образом генерировать изменения в базе — например, мы делаем это просто через наш фронт, вручную создавая активность тестовыми пользователями.
Параллельно нужно наблюдать за папкой /var/lib/postgresql/backups/foo/wal сервера бекапов, где примерно раз в минуту будет появляться новый файл:

После проверки очень важно вернуть archive_timeout в продакшен значение (у нас в зависимости от клиента это минимум 1 час, т.е. 3600, максимум — сутки, т.е

86400).

Если видно, что файлы не отправляются на сервер бекапов, то исследование проблемы можно начать с анализа логов PostgreSQL, лежащих здесь /var/log/postgresql. Например, если пара приватный-публичный ключ была настроена неверно, то можно увидеть подобную запись в файле postgresql-10-main.log (название лог-файла зависит от устанавливаемой версии):

Восстановление из бекапа

Пусть у нас заранее подготовлен новый сервер, где установлен PostgreSQL той же мажорной версии, что и на целевом сервере. Также предположим, что с сервера бекапов мы предварительно скопировали папку бекапа /var/lib/postgresql/backups/foo на новый сервер по тому же пути.
Далее по шагам описана процедура развертывания этого бекапа на новом сервере.

Выясняем путь, по которому хранятся файлы данных:

В зависимости от версии PostgreSQL выдастся что-то подобное: /var/lib/postgresql/10/main

Удаляем все содержимое папки с данными:

Останавливаем инстанс PostgreSQL на ЦЕЛЕВОМ сервере:

Если после сбоя доступ к целевом серверу сохранился, то останавливаем там инстанс PostgreSQL, чтобы потерять как можно меньшее количество новых данных, которые не войдут в бекап.

Распаковываем файлы из бекапа в папку данных PostgreSQL:

Здесь и далее снова работаем с новым сервером.

Ожидается, что команда tar, запущенная от sudo, сохранит group и ownership распакованных файлов за пользователем postgres — это важно, поскольку далее их будет использовать PostgreSQL, работающий именно от этого пользователя. В папке с данными создаем конфиг восстановления:

В папке с данными создаем конфиг восстановления:

Если сжатия на шаге архивирования WAL-файлов не было:

Если сжатие на шаге архивирования WAL-файлов было, то restore_command должен выглядеть следующим образом (все остальное не меняется):

Запускаем PostgreSQL:

Обнаружив в папке с данными конфиг восстановления, PostgreSQL входит в режим восстановления и начинает применять (replay) WAL-файлы из архива

После окончания восстановления recovery.conf будет переименован в recovery.done (поэтому очень важно на предыдущем шаге дать пользователю postgres права на изменение файла). После этого шага сервер PostgreSQL готов к работе

Если по внешним признакам видно, что база не восстановилась либо восстановилась только до уровня базового бекапа, то исследование проблемы можно начать с анализа логов PostgreSQL, лежащих здесь /var/log/postgresql. Например, если на предыдущем шаге не были даны права пользователю postgres на папку с бекапом WAL-файлов, то можно увидеть подобную запись в файле postgresql-10-main.log (название лог-файла зависит от устанавливаемой версии):

Настройка резервного копирования файловой базы 1С

Зайдите в меню «Администрирование»-«Обслуживание»:

Раздел Обслуживание

Разверните раздел «Резервное копирование и восстановление»

Резервное копирование и администрирование

Здесь нас интересует поле «Способ резервного копирования».

Есть 2 варианта: «На локальном компьютере» и «1С:Облачный архив».

Рассмотрим каждый из вариантов.

1С:Облачный архив

Если у вас есть подписка ИТС:Проф и вы не собираетесь от нее отказываться, то я рекомендую использовать «1С:Облачный архив», т.к. для вас этот сервис бесплатный. Еще один плюс облачного хранения: вы сможете восстановить базу при физическом уничтожении компьютера или если у вас сломается жесткий диск. Если ИТС у вас нет, то переходите к следующему разделу «На локальном компьютере».

Выберите «1С: облачный сервис» и нажмите «Подключить»:

1С Облачный архив

В открывшейся форме введите свои логин и пароль от ИТС и нажмите «Подключиться»:

Мастер подключения 1С облачный архив

Дальше проблем быть не должно. Если будут — нажмите на «техническую поддержку»:

Техническая поддержка

Сформируется письмо в техподдержку, и она поможет вам зарегистрироваться.

На локальном компьютере

Если подписки ИТС:Проф нет, то облако обойдется вам почти в 1000р/месяц. Сейчас мы разберем как сделать тоже самое, но бесплатно.

Выберите вариант «На локальном компьютере» и нажмите «Настройка резервного копирования»:

На локальном компьютере

Поставьте флажок «Выполнять автоматическое резервное копирование»

Настройка резервного копирования файловой базы 1с

Укажите каталог для сохранения резервных копий. Лучше, чтобы это был отдельный жесткий диск. Если отдельного жесткого диска нет, то укажите каталог в том разделе диска, где НЕ установлен Windows. Т.е. любой, кроме диска «C»:

Каталог для сохранения резервных копий

«Хранить резервные копии» — укажите «Последние 10 шт», обычно этого достаточно, плюс будет не много места занимать на жестком диске:

Хранить только 10 последних копий

Теперь надо решить, как будет выполняться резервное копирование: «Регулярно по расписанию» или «При завершении работы».

При выборе надо учитывать, что и в том, и в другом случае всех пользователей базы 1С «выгонит», чтобы сделать резервную копию.

Вариант «Регулярно по расписанию»

Этот вариант можно выбрать, если все пользователи в одно и тоже время уходят, например, на обед или пить чай.

Тогда нажмите на «Один день; один раз в день» и выберите расписание. Например, через 15 минут после того, как все ушли на обед (на случай, если кто-то задержится)

Настройка расписания

В открывшемся меню поставьте «1» в поле «Повторять каждые», чтобы получилось «Каждый день; один раз в день»:

Каждый день. Один раз в день

Перейдите на закладку «Дневное» и укажите в поле «Время начала» время, когда надо делать резервную копию. Затем нажмите «Ок»:

Время резервного копирования

В результате должно получиться вот так:

Каждый день, с 13 15  

Учтите, что ваш сеанс 1с должен быть запущен в это время, т.е. уходя на обед, вам надо оставлять 1с включенной, чтобы копия создалась

Вариант «При завершении работы»

Этот вариант подойдет вам, если вы последним уходите из офиса (или по крайней мере последним выходите из 1С).

При завершении работы

В этом варианте дополнительно ничего не нужно настраивать. Просто при закрытии 1С система будет предлагать вам сделать резервную копию.

Как происходит резервное копирование при завершении работы

При выходе из 1С будет появляться окно «Не выполнено резервное копирование при завершении работы»:

Если нажать «Завершить работу», то 1С закроется без резервной копии.

При нажатии «Продолжить работу» у правом нижнем углу 1С появится вот такое окно:

Окно, предлагающее сделать резервную копию

Нажмите на него, чтобы появилось вот такое окно:

Выполнить резервное копирование

Осталось только нажать «Завершить» не снимая флажок «Выполнить резервное копирование». После этого 1С сделает резервную копию и завершит работу:

Создание резервной копии информационной базы

Итак, самое главное сделали, резервные копии создаются, осталось сделать автоматическую выгрузку копий в облако, чтобы обезопасить данные от форс-мажоров.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: