admin / 27.03.2018
Содержание
Идея, стоящая за методом дампа, заключается в генерации текстового файла с командами SQL, которые при выполнении на сервере, пересоздадут базу данных в том же самом состоянии, в котором она была на момент создания дампа. PostgreSQL предоставляет для этой цели програмнную утилиту pg_dump. Базовая подсказка использования этой команды выглядит так:
pg_dump >
Как видите, pg_dump записывает результаты своей работы на стандартный вывод. Далее будет рассмотрено как из этого можно извлечь пользу.
pg_dump является для PostgreSQL обычным клиентским приложением (Хотя и особенно умным). Это означает, что вы можете выполнять процедуру резервного копирования с любого удалённого компьюетра, который имеет доступ к нужной базе данных. Но помните, что у pg_dump нет каких-то особых прав доступа. В частности, эта утилита должна иметь доступ на чтение всех таблиц, резервную копию которых вы хотите сделать, так что на практике её почти всегда нужно запускать с правами суперпользователя СУБД.
Чтобы указать, к какому серверу должен подключаться pg_dump, используйте опцию командной строки и . По умолчанию, в качестве сервера выбирается localhost или тот сервер, что указан в переменной окружения . Похожим образом, по умолчанию используется порт, указанный в переменной окружения или, если переменная незаданна, то порт, указанный по умолчанию при компиляции. (Удобно, что сервер обычно имеет то же значение, скомпилированное по умолчанию.)
Как и любое другое клиентское приложение PostgreSQL, pg_dump по умолчанию будет подключаться к базе данных, под пользователем, имя которого совпадает с именем текущего пользователя в операционной системе. Чтобы перекрыть это, либо укажите опцию , либо установите переменную окружения . Помните, что подключения, которые выполняет pg_dump, работают с учётом обычных механизмов авторизации (которые описываются в Chapter 19).
Важное преимущество pg_dump над другими методами резервного копирования, описывается позже и состоит в том, что вывод pg_dump может быть обычно перезагружен в более новые версии PostgreSQL, в то время как резервная копия на уровне файловой системы и непрерывное архивирование являются жёстко зависимыми от версии сервера. Также, только pg_dump является методом, который будет работать при переносе базы данных на другую машинную архитектуру, например, при переносе с 32-битной на 64-битную версию сервера.
Дампы, создаваемые pg_dump являются внутренне целостными, что означает, что дамп представляет собой снимок базы данных на момент начала запуска pg_dump. pg_dump не блокирует другие операции с базой данных во время своей работы. (Исключениями являются случаи, когда есть необходимость работы с эксклюзивной блокировкой, как у большинства форм команды .)
Important: Если ваша схема базы данных полагается на OID (например, как внешние ключи), вы должны сказать pg_dump, чтобы в дамп были также включены OID. Чтобы сделать это, используйте опцию командной строки .
Текстовые файлы, созданные pg_dump предназначаются для последующего чтения программой psql. Общий вид команды для восстановления дампа:
psql <
где — это файл, содержащий вывод команды pg_dump. База данных, заданная параметром не будет создана данной командой, так что вы должны создать её сами из базы перед запуском psql (например, с помощью команды ). psql поддерживает опции для указания сервера, к которому осуществляется подключение и имени пользователя, похожие на pg_dump. Подробности см. на странице справочного руководства psql.
Перед восстановлением SQL дампа. все пользователи, которые владеют объектами или имеют права на объекты в базе данных, выгруженной в дамп, должны уже существовать. Если их нет, при восстановлении будут ошибки пересоздания объектов с оригинальными владельцами и/или правами. (Иногда, это и есть то, что вы хотите, но обычно нет).
По умолчанию, если произойдёт ошибка SQL, программа psql продолжит своё выполнение. Вы можете захотеть запустить psql с установленной переменной , чтобы изменить такое поведение и заставить psql выйти с кодом выхода 3, в случае возникновения ошибки SQL:
psql —set ON_ERROR_STOP=on имя_БД < файл_дампа
В любом случае, у вас будет только частично восстановленная база данных. В качестве альтернативы, вы можете указать, что весь дамп должен быть восстановлен в одну транзацию, так что восстановление или будет полностью выполненно или полностью не выполнено. Данный режим может быть задан, с помощью опций командной строки или для psql. Когда используется этот режим, будьте осторожны, даже маленькая ошибка может привести к откату процесса восстановления, который длится уже несколько часов. Однако, это может быть предпочтительней, чем ручная очистка сложной базы данных, после частично восстановленного дампа.
Возможность pg_dump и psql писать и читать из конвееров, делают возможным создание дампа базы данных напрямую с одного сервера на другой, например:
pg_dump -h | psql -h
Important: Дампы, которые делает pg_dump являются относительными . Это означает, что любые языки, процедуры и т.д. добавленные через , также попадут в дамп при выполнении pg_dump. В итоге, при восстановлении, если вы использовали специально изменённый , вы должны создать пустую базу данных из , как показано в примере выше.
После восстановления резервной копии, мудрым будет запустить ANALYZE на каждую базу данных, чтобы оптимизатор запросов получил нужную статистику; подробности см. в see Section 23.1.3 и в Section 23.1.5. Для того, чтобы узнать больше о том как эффективно загружать большие объёмы данных в PostgreSQL, см. Section 14.4.
pg_dump делает дамп только одной базы данных в один момент времени и не включает в дамп информацию о ролях или табличных пространствах (потому что эти данные относятся скорее к уровню кластера, чем к самой базе данных). Чтобы поддержать удобное создание дампа всего содержимого кластера баз данных, предоставляется программа pg_dumpall. pg_dumpall делает резервную копию каждой базы данных кластера, а также защищает данные уровня кластера, такие как роли и определения табличных пространств. Базовая форма использования этой команды:
pg_dumpall >
Результирующий дамп может быть восстановлен с помощью psql:
psql -f postgres
(Фактически, вы можете указать любые имена существующих баз данных, чтобы начать восстановление, но если вы производите загрузку в пустой кластер, то обычно нужно использовать ). При восстановлении дампа, сделанного pg_dumpall, всегда необходимо, выполнять восстановление с правами суперпользователя баз данных, потому что они требуются для восстановления ролей и информации о табличных пространствах. Если вы используете табличные пространства, убедитесь, что пути к табличным пространствам в дампе, соответствуют новой установке.
pg_dumpall получает и выдаёт команды для пересоздания ролей, табличных пространств и пустых баз данных, затем вызывает для каждой базы данных pg_dump. Это означает, что в то время как каждая база данных будет внутренне целостной, снимки других баз данных могут не быть точно синхронизированны.
Некоторые операционные системы имеют ограничение на максимальный размер файла, что приводит к проблемам при создании больших файлов с помощью pg_dump. К счастью, pg_dump может писать на стандартный вывод и вы можете использовать стандартные инструменты Unix для того, чтобы избежать потенциальных проблем. Вот несколько возможных методов:
Используйте сжатые дампы. Вы можете использовать вашу любимую программу сжатия, например gzip:
pg_dump | gzip > .gz
Загружая впоследствии сжатый дамп командой:
gunzip -c .gz | psql
или:
cat .gz | gunzip | psql
Используйте . Команда позволяет вам разбивать вывод на файлы меньшего размера, которые не попадают под ограничения на максимальный размер файла в файловой системе. Например, чтобы нарезать дамп на кусочки по 1 мегабайту:
pg_dump | split -b 1m —
Загружая впоследствии полученные файлы командой:
cat * | psql
Используйте специальный формат дампа в pg_dump. Если PostgreSQL была скомпилирована в системе с установленной библиотекой zlib, то специальный формат дампа будет сжимать данные, которые выдаются в файл вывода. Это приведёт к созданию файла дампа, который по размеру будет похож на дамп, сжатый , но такой формат будет иметь преимущество, потому что позволяет выборочное восстановление таблиц. Следующая команда делает дамп базы данных, используя специальный формат дампа:
pg_dump -Fc >
Специальный формат дампа не является скриптом для psql и должен восстанавливаться с помощью команды pg_restore, например:
pg_restore -d
См. подробности на страницах справочного руководства pg_dump и pg_restore.
Для очень больших баз данных, вам может понадобиться сочетать с одним из двух других методов.
Back to top
Все админы делятся на 2 категории
— те которые уже делают бэкап
и те которые ещё не делают.
PostgreSQL является современной системой управления базами данных, часто используемая для хранения и обработки информации, связанной с веб-сайтами или сторонними приложениями. У любой базы данных, важно вовремя реализовать резервное копирование, чтобы избежать возможную потерю данных.
В этом посте я постараюсь рассказать о некоторых способах, которыми вы можете сделать резервную копию PostgreSQL. Для тестов будем использовать Ubuntu 12,04 VPS с PostgreSQL 9.1. Для большинства современных дистрибутивов и последних версии PostgreSQL мои советы будут актуальны.
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, необходимо перенаправить файл с дампом в стандартный ввод 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
При этом любая ошибка приведет к откату процесса восстановления, что может потребовать достаточно продолжительного времени.
Чтобы сэкономить время, можно сделать резервную копию всех баз данных в вашей системе, при помощи утилиты «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
Вы можете оставить комментарий ниже.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit totam saepe iste maiores neque animi molestias nihil illum nisi temporibus.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore nostrum nisi, doloremque error hic nam nemo doloribus porro impedit perferendis. Tempora, distinctio hic suscipit. At ullam eaque atque recusandae modi fugiat voluptatem laborum laboriosam rerum, consequatur reprehenderit omnis, enim pariatur nam, quidem, quas vel reiciendis aspernatur consequuntur. Commodi quasi enim, nisi alias fugit architecto, doloremque, eligendi quam autem exercitationem consectetur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Exercitationem quibusdam eveniet, molestiae laborum voluptatibus minima hic quasi accusamus ut facere, eius expedita, voluptatem? Repellat incidunt veniam quaerat, qui laboriosam dicta. Quidem ducimus laudantium dolorum enim qui at ipsum, a error.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero voluptates officiis tempore quae officia! Beatae quia deleniti cum corporis eos perferendis libero reiciendis nemo iusto accusamus, debitis tempora voluptas praesentium repudiandae laboriosam excepturi laborum, nisi optio repellat explicabo, incidunt ex numquam. Ullam perferendis officiis harum doloribus quae corrupti minima quia, aliquam nostrum expedita pariatur maxime repellat, voluptas sunt unde, inventore.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit totam saepe iste maiores neque animi molestias nihil illum nisi temporibus.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perspiciatis quia quas, quis illo adipisci voluptate ex harum iste commodi nulla dolor. Eius ratione quod ab!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur, dignissimos iure rem fugiat consequuntur officiis.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. At temporibus tempora necessitatibus reiciendis provident deserunt maxime sit id. Dicta aut voluptatibus placeat quibusdam vel, dolore.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corporis iusto sapiente, excepturi velit, beatae possimus est tenetur cumque fugit tempore dolore fugiat! Recusandae, vel suscipit? Perspiciatis non similique sint suscipit officia illo, accusamus dolorum, voluptate vitae quia ea amet optio magni voluptatem nemo, natus nihil.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor quasi officiis pariatur, fugit minus omnis animi ut assumenda quod commodi, ad a alias maxime unde suscipit magnam, voluptas laboriosam ipsam quibusdam quidem, dolorem deleniti id.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. At temporibus tempora necessitatibus reiciendis provident deserunt maxime sit id. Dicta aut voluptatibus placeat quibusdam vel, dolore.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque tempore ipsam, eos suscipit nostrum molestias reprehenderit, rerum amet cum similique a, ipsum soluta delectus explicabo nihil repellat incidunt! Minima magni possimus mollitia deserunt facere, tempore earum modi, ea ipsa dicta temporibus suscipit quidem ut quibusdam vero voluptatibus nostrum excepturi explicabo nulla harum, molestiae alias. Ab, quidem rem fugit delectus quod.
Резервное копирование PostgreSQL — ключевой компонент организации эффективной и безопасной работы с СУБД PostgreSQL. Handy Backup – предоставляет средства для бэкапа PostgreSQL, обеспечивающие надёжное хранение и быстрое восстановление данных.
Handy Backup копирует инофрмацию из таблиц PostgreSQL без остановки работы сервера СУБД. Все транзакции во время бэкапа производяттся как обычно, сохраняя общую производительность работы сервера PostgreSQL.
Handy Backup позволяет автоматически извлекать данные из баз, схем, процедур и настроек PostgreSQL с помощью единого инструмента бэкапа (плагина). Этот плагин полностью автоматизирован и не требует вмешательства в работу СУБД.
Бэкап базы PostgreSQL с помощью Handy Backup позволяет сохранять все данные в исходном формате, что даёт возможность запускать, читать, модифицировать и клонировать данные PostgreSQL прямо в резервных копиях, без восстановления.
В дополнение к вышеприведённому списку основных возможностей, Handy Backup предоставляет множество других функций, удобных при создании резервной копии PostgreSQL. Этот список возможностей включает такие вещи, как:
Версия 7.13.0 от 26 мая 2018. 162 MB
Программа резервного копирования Handy Backup. 7400RUB за лицензию
Office Expert – программа резервного копирования, клонирования, зеркалирования, репликации и восстановления резервных копий PostgreSQL для одного сервера.
Для создания задачи автоматического бэкапа базы PostgreSQL, пожалуйста, воспользуйтесь следующей инструкцией:
Совет: мы не рекомендуем пользоваться инкрементальным бэкапом PostgreSQL, так как он обычно не даёт выигрыша ни по времени, ни по объёму данных.Используйте дифференциальное резервное копирование базы данных PostgreSQL везде, где это возможно!
Внимание: у вас должны быть достаточные пользовательские привилегии для выполнения оператора PostgreSQL SELECT, используемого инструментом бэкапа.
Handy Backup сохраняет резервные копии PostgreSQL в виде обычных таблиц, позволяющих пользователю копировать, модифицировать и использовать их без восстановления.
Кроме того, Handy Backup позволяет создавать задачи восстановления данных PostgreSQL из копий.
Подробнее о создании задачи восстановления PostgreSQL.
С помощью Handy Backup вы можете восстановить вашу базу данных PostgreSQL database в новое место, отличающееся от исходного размещения. Используя эту технику, вы можете восстановить из одной копии столько новых клонов базы данных, сколько вам нужно.
Handy Backup позволяет создавать резервные копии SQL-версии 1С, данные которой хранятся в базе данных под управлением PostgreSQL. Подробнее о возможностях резервного копирования 1С с Handy Backup.
Также можно настроить резервное копирование PostgreSQL, развёрнутой под 1С. Узнать подробнее о настройках взаимодействия 1С и PostgreSQL.
Резервное копирование БД PostgreSQL доступно в двух решениях Handy Backup – Office Expert и Server Network.
Оба решения предоставляют полнофункциональные средства резервного копирования PostgreSQL, с некоторыми отличиями. Решение Office Expert создано для обслуживания одной машины, а решение Server Network создано для обслуживания множества компьютеров в сетевой среде.
Попробуйте нашу программу для бэкапа PostgreSQL бесплатно в течение 30-дневного пробного периода! Загрузите новейшую версию Handy Backup с нашего сайта прямо сейчас!
Резервное копирование других баз данных:
FILED UNDER : IT