Введение
К современной информационной системе предъявляется множество требований по эффективности и стабильности работы. Одно из них — отказоустойчивость, обеспечивающая защиту от атак на целостность и доступность, технических проблем и других различных инцидентов, которые могут повредить достаточно большое количество данных. Для использования инструментов и утилит необходимо определить область применения, в данной инструкции мы рассмотрим резервирование и резервное копирование данных в СУБД PostgreSQL с помощью проприетарных утилит.
Лучшие практики
Существуют базы данных различного размера, структуры и объема, но нам необходимо создать резервную копию с сохранением целостности и правильно ее восстановить. Утилиты, которые мы можем использовать, это pg_dump и psql или pg_restore. Они используют механизм чтения текущих баз данных и преобразования их в команду в текстовом файле, поэтому на вход утилиты мы указываем БД, а на выходе получаем текстовый файл.
Этот метод имеет ряд преимуществ: согласованность версий, простота на этапе экспорта и отсутствие необходимости в привилегированных правах в системе. Для использования этого типа резервного копирования прежде всего необходимо проверить наличие баз данных и выбрать нужный объект:
\l

Давайте проверим, как выглядят данные? Введите команду ниже:
SELECT * FROM customers;

У нас есть тестовая запись в БД с данными теоретического пользователя, мы используем утилиту pg_dump с опциями: -U для определения пользователя СУБД, -d для идентификации базы данных, а для удаленного администрирования можно использовать параметры -h и -p. Соответствие хоста и порта:
pg_dump -U postgres -d db12 > backup.sql

Также для выполнения этой задачи мы можем использовать последовательности команд:
ssh user@hostname -p 5432 pg_dump -U postgres -d db12 > backup.sql
Замените имя пользователя, имя хоста и порт на желаемую конфигурацию. Если требуется быстрое резервное копирование и восстановление БД между несколькими серверами, то используйте эту команду:
pg_dump -h 78.43.11.2 db_name | psql -h 72.43.11.2 db_name
Первая часть позволила подключиться к серверу с БД и с помощью pipe перенаправить вывод на целевой сервер с помощью команды после знака разделения.
А с помощью команды scp можно передать базу данных:
scp ./backup.sql root@94.141.98.9:/

Необходимо создать базу данных и восстановить содержимое командой, приведенной ниже:
CREATE DATABASE db12;
Затем восстановите с помощью команды psql:
psql -U postgres -d db12 < backup.sql

Убедитесь в целостности содержимого БД:
SELECT * FROM customers;

Если база данных имеет большой объем и размер, то для переноса фрагментов данных используйте утилиты split и zip:
pg_dump name_db | gzip > name_archive.gz
gunzip -c name_archive.gz | psql name_db
И разбить на части с помощью синтаксиса ниже:
pg_dump name_db | split -b 4G - name_file
cat name_file | psql name_db
Это позволяет более эффективно передавать данные в процессе резервного копирования.
Вывод
Следуя этим рекомендациям и используя команды и утилиты, можно эффективно и качественно управлять резервным копированием и восстановлением данных в PostgreSQL, обеспечивая тем самым устойчивость и надежность современной информационной системы перед лицом потенциальных вызовов и угроз.