Перенос postgresql на другой сервер windows

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

Всем привет! Сегодня мы рассмотрим процесс переноса базы данных PostgreSQL с одного сервера на другой, например, с компьютера разработчика на production-сервер, при этом мы будем использовать графический инструмент pgAdmin 4.

Перенос базы данных PostgreSQL на другой сервер с помощью pgAdmin 4

Заметка! Установка и настройка PostgreSQL на Windows 10.

Содержание

  1. Исходные данные. Задача
  2. Создание дампа базы данных PostgreSQL в pgAdmin 4
  3. Создание дампа базы данных в сжатом формате
  4. Создание дампа базы данных в простом формате SQL
  5. Импорт дампа базы данных PostgreSQL в pgAdmin 4
  6. Импорт сжатого дампа базы данных
  7. Импорт дампа базы данных в формате SQL
  8. Видео – Перенос базы данных PostgreSQL на другой сервер с помощью pgAdmin 4

Исходные данные. Задача

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

В качестве инструмента разработки мы используем стандартное графическое приложение pgAdmin 4.

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

В итоге базу данных мы разработали, протестировали ее, внесли в нее необходимые данные, заполнили справочники, в общем, база данных готова.

Теперь у нас возникла необходимость перенести эту базу данных на реальный сервер, который и будет выступать в качестве сервера баз данных. И так как мы используем PostgreSQL, в качестве такого сервера баз данных обычно выступает сервер под управлением операционной системы Linux.

Таким образом, нам необходимо перенести базу данных PostgreSQL, разработанную в Windows, в базу данных PostgreSQL на Linux. В моем случае в качестве операционной системы Linux будет выступать дистрибутив Debian.

Заметка! Как установить PostgreSQL на Linux Debian.

Весь процесс переноса базы данных PostgreSQL достаточно простой, суть в следующем.

Нам необходимо создать копию нашей базы данных (дамп), затем создать пустую базу на нужном нам сервере и восстановить все данные, используя созданный ранее дамп.

Все это можно сделать с нашего клиентского компьютера, используя pgAdmin 4, если, конечно же, целевой сервер нам доступен, если недоступен, то придётся каким-то другим образом переносить дамп базы данных на нужный сервер и, используя стандартные консольные утилиты, восстановить базу данных из дампа.

Кстати, стоит отметить, что pgAdmin 4 для экспорта/импорта баз данных использует как раз эти стандартные консольные утилиты, в частности pg_dump, pg_dumpall и pg_restore, которые по умолчанию входят в состав PostgreSQL.

pg_dump – утилита для экспорта баз данных PostgreSQL

pg_dumpall – утилита для экспорта кластера баз данных PostgreSQL (всех данных на сервере)

pg_restore – утилита восстановления баз данных PostgreSQL из файла архива

Таким образом, благодаря pgAdmin 4 нам не нужно писать и выполнять команды в командной строке, за нас все это делает pgAdmin 4, мы всего лишь будем пользоваться мышкой, настраивая все параметры в графическом интерфейсе.

Создать дамп базы данных PostgreSQL можно в нескольких форматах, в частности:

Специальный (Custom) – это пользовательский формат, который использует сжатие. Данный формат по умолчанию предлагается в pgAdmin 4 и рекомендован для средних и больших баз данных. Обычно архивные файлы в таком формате создают с расширением backup, однако можно использовать и другое расширение.

Tar (tar) – база данных выгружается в формат tar. Данный формат не поддерживает сжатие.

Простой (plain) – в данном случае база данных выгружается в обычный текстовый SQL-скрипт, в котором все объекты базы данных и непосредственно сами данные будут в виде соответствующих SQL инструкций. Данный скрипт можно легко отредактировать в любом текстовом редакторе и выполнить, используя Query Tool, как обычные SQL запросы. Данный формат рекомендован для небольших баз данных, а также для тех случаев, когда требуется внести изменения в дамп базы данных перед восстановлением.

Заметка! Что такое SQL. Назначение и основа.

Каталог (directory) – этот формат файла создает каталог, в котором для каждой таблицы и большого объекта будут созданы отдельные файлы, а также файл оглавления в машиночитаемом формате, понятном для утилиты pg_restore. Этот формат по умолчанию использует сжатие, а также поддерживает работу в несколько потоков.

В данном материале мы рассмотрим создание дампа в специальном формате, а также в формате обычного SQL скрипта, дело в том, что процесс восстановления базы данных из этих форматов в pgAdmin 4 немного отличается.

Создание дампа базы данных в сжатом формате

Чтобы создать дамп базы данных PostgreSQL в pgAdmin 4, необходимо в обозревателе выбрать нужную базу данных, я выбираю базу данных shop, далее необходимо вызвать контекстное меню правой кнопкой мыши и нажать на пункт «Резервная копия».

Затем всего лишь нужно указать имя архивного файла и путь к каталогу, где его сохранить, для этого можно использовать кнопку с тремя точками.

Формат «Специальный», как было отмечено ранее, предлагается по умолчанию, поэтому выбирать его не требуется.

Как я уже отмечал, обычно архив в таком формате создают с расширением backup, я так и поступаю, т.е. архив назову shop.backup и сохраню его в каталоге D:PostgreSQL_Backup.

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

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

Курс по SQL для начинающих

Больше никаких настроек в нашем случае делать нет необходимости, и мы можем нажать на кнопку «Резервная копия», чтобы запустить процесс создания дампа базы данных.

Скриншот 1

Когда появится сообщение «Успешно завершено», значит, процесс создания дампа базы данных PostgreSQL завершен успешно, в противном случае Вы будете получать сообщения о неуспешном завершении.

Скриншот 2

Заметка! ТОП 5 популярных систем управления базами данных (СУБД).

Создание дампа базы данных в простом формате SQL

В данном случае нам необходимо сделать практически все то же самое, только нужно выбрать формат «Простой» и дополнительно включить пару параметров, чтобы добавление данных осуществлялось с помощью обычных инструкций INSERT, а не с помощью команды COPY, которая используется по умолчанию.

Для этого переходим на вкладку «Параметры выгрузки» и включаем два параметра «Использовать команды INSERT» и «INSERT с указанием столбцов», хотя данный параметр можно и не указывать.

Заметка! Начинающим программистам рекомендую почитать мою книгу «SQL код», которая поможет Вам изучить язык SQL как стандарт, в ней рассматриваются все базовые конструкции языка SQL, приводится много примеров и скриншотов.

Скриншот 3

Импорт дампа базы данных PostgreSQL в pgAdmin 4

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

Заметка! Как создать базу данных в PostgreSQL с помощью pgAdmin 4.

Все действия по созданию базы данных и восстановлению данных этой базы из архивной копии мы будем делать все на том же компьютере с помощью того же pgAdmin 4, только для этого необходимо подключиться к нужному нам серверу (пункт контекстного меню «Создать сервер» и ввести настройки для подключения, подробнее, как это делается, я рассказывал в той же статье, которая посвящена установке PostgreSQL на Debian).

Импорт сжатого дампа базы данных

Чтобы импортировать базу данных, дамп который был создан в «специальном» формате, необходимо на целевом сервере выбрать базу данных, которую требуется восстановить из дампа (мы ее предварительно создали), в контекстном меню выбрать пункт «Восстановить», затем в пункте «Имя файла», используя кнопку с тремя точками, указать файл дампа, который мы создали чуть ранее с расширением backup.

Больше никаких настроек вводить не требуется, нужный формат выбран по умолчанию, мы можем сразу нажимать кнопку «Восстановить».

Скриншот 4

Когда появится сообщение «Успешно завершено», процесс будет завершен.

Скриншот 5

В результате все данные будут восстановлены из дампа, и таким образом мы перенесли базу данных PostgreSQL на новый сервер.

Заметка! Как создать таблицу в PostgreSQL с помощью pgAdmin 4.

Импорт дампа базы данных в формате SQL

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

Для этого открываем Query Tool (запросник) в контексте нужной нам базы данных, затем используя кнопку «Открыть файл» выбираем наш дамп в формате SQL и нажимаем кнопку «Выполнить».

Если инструкция выполнится без ошибок, значит, все хорошо.

Скриншот 6

Примечание! Если Вы уже восстановили базу данных предыдущим способом, то, чтобы использовать этот способ, необходимо пересоздать базу данных, иначе возникнет конфликт и, соответственно, ошибка, так как все объекты в базе уже будут существовать.

В итоге мы перенесли базу данных PostgreSQL с одного сервера, который управляется операционной системой Windows, на другой, который управляется Linux, хотя это, как Вы понимаете, в нашем случае было не так принципиально.

Стоит отметить, что если требуется перенести базу данных, размер которой достаточно большой, например, несколько десятков или сотен гигабайт, то лучше напрямую использовать консольные утилиты pg_dump или pg_dumpall, т.е. без графического интерфейса pgAdmin 4.

Опрос. Какой операционной системой Вы пользуетесь?

Видео – Перенос базы данных PostgreSQL на другой сервер с помощью pgAdmin 4

На сегодня это все, надеюсь, материал был Вам полезен, пока!

В этой статье расскажем, как правильно осуществить перенос базы данных PostgreSQL с одного сервера на другой. Рассмотрим несколько вариантов создания дампа и его дальнейшего импорта на новый VPS/VDS.

  • Создание резервной копии БД PostgreSQL в pgAdmin 4
  • Импорт дампа БД PostgreSQL в pgAdmin 4
  • Экспортирование и импортирование базы данных в простом формате SQL

Необходимость такого переноса может возникнуть после того, как IT-специалист завершает разработку базы данных PostgreSQL через бесплатную программу pgAdmin 4. Этот инструмент предпочитают многие разработчики, так как он идеально подходит для решения самых разных задач:

  • написание SQL-запросов;
  • разработка процедур;
  • администрирование БД PostgreSQL.

Прелесть pgAdmin 4 редакции в том, что она работает в режиме веб-приложения, так что с программой можно работать удаленно буквально из любой точки мира. Это программное обеспечение совместимо со всеми актуальными версиями операционных систем Linux, Windows и macOS, что лишь подчеркивает его универсальность. Но не будем сильно отклоняться от темы и перейдем к рассмотрению процесса переноса базы данных PostgreSQL на другой сервер.

Наша задача – создать копию существующей БД, а затем перенести её на новый VPS-сервер и там восстановить данные. Всё это легко делается через клиентский компьютер в веб-приложении pgAdmin 4:

  1. В обозревателе выберите целевую базу данных.
  2. Кликните на неё ПКМ и выберите пункт «Резервная копия».

Программа предложит вам указать имя для дампа и путь, по которому сохранится бэкап-файл. В поле «Формат» оставляем «Специальный», или «Custom», если интерфейс приложения у вас на английском. Рассматриваемый формат предполагает сжатие, и он рекомендуется для резервирования больших и средних баз данных, так будет проще осуществить перенос. Помимо него, существуют еще три формата:

  1. Tar (tar) – в этом случае база данных не сжимается.
  2. Простой (plain). На выходе получаем текстовый SQL-скрипт, содержащий инструкции. Этот формат хорош тем, что позволяет на ходу редактировать дамп базы данных через любой удобный текстовый редактор. Если после создания дампа планируете что-то изменять в нем до импорта на новый сервер, то этот вариант оптимален.
  3. Каталог (directory). Создается каталог, где все таблицы и объемные объекты резервируются в виде отдельных файлов. Directory-формат применяет алгоритмы сжатия и позволяет выгружать данные в несколько потоков параллельно – удобно для больших БД.

Как мы уже отметили выше, в большинстве случаев следует оставлять формат, установленный по умолчанию – это custom. В результате сжатия вы получите файл в расширении .backup, и система выдаст сообщение об успешном завершении.

Как перенести базу данных postgresql на другой сервер с помощью pgadmin 4

Импорт дампа БД PostgreSQL в pgAdmin 4

Полученный файл необходимо перенести на другой VPS или VDS. Здесь всё просто:

  1. На новом сервере заходим в pgAdmin и создаем пустую базу данных. Для этого кликните правой кнопкой по вкладке «Базы данных» и выберите пункт «Создать».
  2. Теперь по созданной базе данных во всё той же вкладке «Базы данных» кликните правой кнопкой и выберите пункт «Восстановить», или «Restore».
  3. Далее укажите формат дампа базы данных и путь к файлу с расширением .backup, который мы создали несколькими минутами ранее.

После подтверждения начнется процесс импорта дампа БД PostgreSQL в pgAdmin 4, он может длиться от доли секунды до нескольких минут, всё зависит от производительности серверного железа и размера файла.

Экспортирование и импортирование базы данных в простом формате SQL

Графическая оболочка pgAdmin 4 позволяет также осуществить экспорт базы данных в виде системных SQL инструкций. Делать нужно практически всё то же самое, только при выборе формата указываем «Простой», и дополнительно активируем пару опций во вкладке «Параметры выгрузки»:

  • Использовать команды INSERT.
  • INSERT с указанием столбцов.

Затем аналогичным образом переносим резервную копию на новый сервер и импортируем её. Стандартные функции для восстановления здесь не подойдут, вместо этого от нас потребуется выполнить SQL-скрипт, содержащийся в файле дампа. Для этого делаем следующее:

  1. Через контекстное меню целевой БД заходим в запросник Query Tool.
  2. Нажимаем на пункт «Открыть файл», и в появившемся окошке выбираем дамп базы данных в простом формате SQL, созданный ранее.
  3. Жмем «Выполнить».

Если всё сделали правильно, процесс восстановления займет пару мгновений, и вы сможете приступить к дальнейшей работе. Импорт дампа БД в формате SQL подойдет в тех ситуациях, когда нужно перенести базу данных с одной ОС на другую – например, с Windows на Linux, с macOS на Debian и т.д.

Напоследок добавим, что при необходимости переноса объемной базы данных, размер которой исчисляется несколькими десятками или даже сотнями гигабайт, разумнее прибегнуть к использованию консольных утилит pg_dump или pg_dumpall, в обход графического интерфейса pgAdmin 4. На этом мы заканчиваем наш материал, спасибо за внимание!

Here is an example using pg_basebackup

I chose to go this route because it backs up the entire database cluster (users, databases, etc.).

I’m posting this as a solution on here because it details every step I had to take, feel free to add recommendations or improvements after reading other answers on here and doing some more research.

For Postgres 12 and Ubuntu 18.04 I had to do these actions:


On the server that is currently running the database:

Update pg_hba.conf, for me located at /etc/postgresql/12/main/pg_hba.conf

Add the following line (substitute 192.168.0.100 with the IP address of the server you want to copy the database to).

host  replication  postgres  192.168.0.100/32  trust

Update postgresql.conf, for me located at /etc/postgresql/12/main/postgresql.conf. Add the following line:

listen_addresses = '*'

Restart postgres:

sudo service postgresql restart


On the host you want to copy the database cluster to:

sudo service postgresql stop

sudo su root

rm -rf /var/lib/postgresql/12/main/*

exit

sudo -u postgres pg_basebackup -h 192.168.0.101 -U postgres -D /var/lib/postgresql/12/main/

sudo service postgresql start

Big picture — stop the service, delete everything in the data directory (mine is in /var/lib/postgreql/12). The permissions on this directory are drwx------ with user and group postgres. I could only do this as root, not even with sudo -u postgres. I’m unsure why. Ensure you are doing this on the new server you want to copy the database to! You are deleting the entire database cluster.

Make sure to change the IP address from 192.168.0.101 to the IP address you are copying the database from. Copy the data from the original server with pg_basebackup. Start the service.

Update pg_hba.conf and postgresql.conf to match the original server configuration — before you made any changes adding the replication line and the listen_addresses line (in my care I had to add the ability to log-in locally via md5 to pg_hba.conf).

Note there are considerations for max_wal_senders and wal_level that can be found in the documentation. I did not have to do anything with this.

In this article, we will discuss the process of copying a PostgreSQL database on the same server or from a server to another. 

PostgreSQL copy database within the same server: 

If a situation arises where one needs to copy a PostgreSQL database within a database server for testing purposes. PostgreSQL makes it simple to do so using the CREATE DATABASE statement as follows: 

Syntax:
CREATE DATABASE target_database 
WITH TEMPLATE source_database;

This statement copies the source_database to the target_database. For instance, to copy the dvdrental sample database which is described here and can be downloaded from here, to the dvdrental_test database, you use the following statement: 

CREATE DATABASE dvdrental_test 
WITH TEMPLATE dvdrental;

It may take a while to complete copying depending upon the size of the original database. 

PostgreSQL copy database from a server to another: 

There are many ways to copy a database between various PostgreSQL database servers. The connection between servers grows slower as the database gets larger. One way of doing so is to create a database dump and restore the same dump to another server. To do so the following commands need to be followed: 

  • Step 1: Create a Dump file of the source database.
pg_dump -U postgres -d source_database -f source_database.sql
  • Step 2: Copy the dump file to the remote server. 
  • Step 3: Create a new database in the remote server where you want to restore the database dump:
CREATE DATABASE target_database;
  • Step 4: Restore the dump file on the remote server: 
psql -U postgres -d target_database -f source_database.sql

Example: 
Here we will copy the dvdrental database from the local server to the remote server. First, we will dump the dvdrental database into a dump file e.g., dvdrental.sql

pg_dump -U postgres -O dvdrental dvdrental.sql

Then we will copy the dump file to a remote server and we will create the dvdrental database on the remote server: 

CREATE DATABASE dvdrental;

Now, we will restore the dump file that we just created into the remote server: 

psql -U postgres -d dvdrental -f dvdrental.sql

For high-speed connections between servers or for smaller databases, you can also use the following command: 

pg_dump -C -h local -U localuser source_database | psql -h remote -U remoteuser target_database

For instance, if one desires to copy the dvdrental database from the localhost to the remote server, you do it as follows: 

pg_dump -C -h localhost -U postgres dvdrental | psql -h remote -U postgres dvdrental

In this article, we will discuss the process of copying a PostgreSQL database on the same server or from a server to another. 

PostgreSQL copy database within the same server: 

If a situation arises where one needs to copy a PostgreSQL database within a database server for testing purposes. PostgreSQL makes it simple to do so using the CREATE DATABASE statement as follows: 

Syntax:
CREATE DATABASE target_database 
WITH TEMPLATE source_database;

This statement copies the source_database to the target_database. For instance, to copy the dvdrental sample database which is described here and can be downloaded from here, to the dvdrental_test database, you use the following statement: 

CREATE DATABASE dvdrental_test 
WITH TEMPLATE dvdrental;

It may take a while to complete copying depending upon the size of the original database. 

PostgreSQL copy database from a server to another: 

There are many ways to copy a database between various PostgreSQL database servers. The connection between servers grows slower as the database gets larger. One way of doing so is to create a database dump and restore the same dump to another server. To do so the following commands need to be followed: 

  • Step 1: Create a Dump file of the source database.
pg_dump -U postgres -d source_database -f source_database.sql
  • Step 2: Copy the dump file to the remote server. 
  • Step 3: Create a new database in the remote server where you want to restore the database dump:
CREATE DATABASE target_database;
  • Step 4: Restore the dump file on the remote server: 
psql -U postgres -d target_database -f source_database.sql

Example: 
Here we will copy the dvdrental database from the local server to the remote server. First, we will dump the dvdrental database into a dump file e.g., dvdrental.sql

pg_dump -U postgres -O dvdrental dvdrental.sql

Then we will copy the dump file to a remote server and we will create the dvdrental database on the remote server: 

CREATE DATABASE dvdrental;

Now, we will restore the dump file that we just created into the remote server: 

psql -U postgres -d dvdrental -f dvdrental.sql

For high-speed connections between servers or for smaller databases, you can also use the following command: 

pg_dump -C -h local -U localuser source_database | psql -h remote -U remoteuser target_database

For instance, if one desires to copy the dvdrental database from the localhost to the remote server, you do it as follows: 

pg_dump -C -h localhost -U postgres dvdrental | psql -h remote -U postgres dvdrental

Не простая операция,  если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп загрузить в нужном месте :).

Фокусы, которые тут не работают

Базы mySQL я иногда экспортирую не с помощью скрипта, а копирую файлы данных. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Копирование сработает, если основные версии серверов совпадает.

В случае postgresql подобный фокус не работает. Вы можете подсмотреть папку с базами данных в конфигурации (вам поможет вот такая команда)

ps auxw | grep postgres | grep D

postgres 23395 0.0 0.7 247736 16164 ? S 17:33 0:00

/usr/lib/postgresql/9.3/bin/postgres D /var/lib/postgresql/9.3/main c

config_file=/etc/postgresql/9.3/main/postgresql.conf

В примере папка с базами: -D /var/lib/postgresql/9.3/main

Названия таблиц и баз вы здесь не увидите в явном виде. Копирование файлов будет бесполезно.

Самый главный админ

Первое, что надо усвоить — операции с postgresql удобно выполнять с правами postgresql же суперадмина. На юзера root PSQL чихал и не признает его авторитета. По умолчанию, супер-юзер имеет имя postgres.

Переходим под эту учетку.

Посмотреть список баз данных

Чтобы узнать какие базы у вас есть в наличии можно использовать команду:

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

Если вы и так знаете название базы данных, и вас есть реквизиты доступа к ней (взятые, к примеру, в настройках подключения вашего сайта или программы), то знакомство со списком баз можно пропустить.

Получение дампа базы postgresql

Для создания дампа базы служит команда pg_dump. Мы направим её вывод в файл через gzip.

pg_dump h localhost O F t c U postgres myDBname | gzip c > myDBfiledump.gz

Здесь:

myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.

Расшифровка ключей:

-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.

: пропускает команды для установки владельца таблиц, видов и т.д.

-F {c|t|p} — формат вывода данных custom, tar, plane text.

-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.

-C, —create — добавляет команду для создания БД, я покажу как создать её вручную.

-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).

Есть и более мощная команда, которая выгружает сразу все базы:

pg_dumpall | gzip c > allDBfiledump.gz

Справку по ключам можно посмотреть так:

pg_dump help

pg_dumpall help

Создание новой базы из консоли PostpreSQL

Получив дамп базы, развернем его на новом месте. Если вы не «зашили» в дамп создание базы, то вам нужно будет предварительно её создать (если она не была создана ранее).

Переходим в консоль postgresql:

В консоли введите SQL команду на создание базы данных. Как видите, я авторизован как супер-юзер PSQL. Для выхода из консоли можно нажать CTRL+D.

Не забывайте про «точку с запятой» в конце команды — без неё команда не будет выполнена. В случае успеха, вы увидите в консоли отклик сервера — «CREATE DATABASE».

Заливка дампа базы postgresql

Для начала распакуем файл из обертки gz:

Теперь все готово для импорта данных.

psql d myNewBase f myDBfiledump

Так база данных myNewBase будет заполнена из файла myDB-filedump.


Данная запись опубликована в 24.01.2017 03:43 и размещена в Программирование.
Вы можете перейти в конец страницы и оставить ваш комментарий.

Задача переноса базы данных относительно PostgreSQL не простая операция. Прямое копирование файлов и директорий здесь не применимо.

Базы данных MySQL можно перенести простым копированием файлов базы. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Прямое копирование сработает, если основные версии серверов совпадают.

В случае postgresql подобный фокус не работает. Подсмотреть папку с базами данных в конфигурации 

ps auxw | grep postgres | grep -- -D

Названия таблиц и баз в явном виде отсутствует. Копирование файлов будет бесполезно.

Главный админ

Операции с postgresql удобно выполнять с правами postgresql суперадмина. Права системного пользователя root PSQL не признает. По умолчанию, суперюзер имеет имя postgres.

Переходим под эту учетку

su postgres

Посмотреть список баз данных

Чтобы узнать какие базы есть используется команда

psql -l

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

Если название базы данных известно и имеются реквизиты доступа к ней (взятые, к примеру, в настройках подключения вашего сайта или программы), то знакомство со списком баз можно пропустить.

Получение дампа базы postgresql

Для создания дампа базы служит команда pg_dump. Для сжатия полученного дампа направляем вывод в файл через gzip.

pg_dump -h localhost -O -F t -c -U postgres myDBname | gzip -c > myDB-filedump.gz

Здесь:
myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.

Расшифровка ключей:
-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.
-О : пропускает команды для установки владельца таблиц, видов и т.д.
-F {c|t|p} — формат вывода данных custom, tar, plane text.
-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.
-C, —сreate — добавляет команду для создания БД, я покажу как создать её вручную.
-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).

Есть и более мощная команда, которая выгружает сразу все базы:

pg_dumpall | gzip -c > allDB-filedump.gz

Справку по ключам можно посмотреть так:

pg_dump --help
pg_dumpall --help

Создание новой базы из консоли PostpreSQL

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

Переходим в консоль postgresql:

psql

В консоли вводим SQL команду на создание базы данных. Для выхода из консоли можно нажать CTRL+D или использовать команду q.

В конце команд консоли обязательно должна присутствовать «точка с запятой»  — без неё команда не будет выполнена. В случае успешного выполнения, в консоли будет отклик сервера — «CREATE DATABASE».

Заливка дампа базы postgresql

Распаковываем файл дампа из архива gz:

gunzip myDB-filedump.gz

Импортируем дамп в базу.

psql -d myNewBase -f myDB-filedump

База данных myNewBase будет заполнена из файла myDB-filedump.

title description author ms.author ms.service ms.subservice ms.topic ms.date ms.openlocfilehash ms.sourcegitcommit ms.translationtype ms.contentlocale ms.lasthandoff ms.locfileid

Дамп и восстановление — база данных Azure для PostgreSQL — один сервер

Описывает, как извлечь базу данных PostgreSQL в файл дампа и выполнить восстановление из файла, созданного pg_dump в базе данных Azure для PostgreSQL-Single Server.

sr-msft

srranga

postgresql

migration-guide

how-to

09/22/2020

16166183b56b371fe8338894f83dbacf2e659c53

772eb9c6684dd4864e0ba507945a83e48b8c16f0

MT

ru-RU

03/20/2021

103563561

Перенос базы данных PostgreSQL с помощью дампа и ее восстановление

[!INCLUDEapplies-to-postgres-single-flexible-server]

Можно извлечь базу данных PostgreSQL в файл дампа с помощью pg_dump и с помощью pg_restore восстановить базу данных PostgreSQL из файла архива, созданного pg_dump.

Предварительные требования

Прежде чем приступить к выполнению этого руководства, необходимы следующие компоненты:

  • сервер базы данных Azure для PostgreSQL с правилами брандмауэра, разрешающими доступ к этом серверу и его базам данных;
  • установленные программы командной строки pg_dump и pg_restore.

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

Создание файла дампа, содержащего загружаемые данные, с помощью pg_dump

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

pg_dump -Fc -v --host=<host> --username=<name> --dbname=<database name> -f <database>.dump

Например, если имеется локальный сервер с базой данных testdb.

pg_dump -Fc -v --host=localhost --username=masterlogin --dbname=testdb -f testdb.dump

Восстановите данные в целевую базу данных Azure для PostgreSQL с помощью pg_restore

После создания целевой базы данных можно воспользоваться командой pg_restore с параметром -d, —dbname, чтобы восстановить данные в целевую базу данных из файла дампа.

pg_restore -v --no-owner --host=<server name> --port=<port> --username=<user-name> --dbname=<target database name> <database>.dump

Если включить параметр —no-owner, все объекты, созданные во время восстановления, будут присвоены пользователю —username. Дополнительные сведения см. в официальной документации PostgreSQL по pg_restore.

[!NOTE]
Если серверу PostgreSQL требуются подключения TLS/SSL (по умолчанию в базе данных Azure для серверов PostgreSQL), задайте переменную среды, PGSSLMODE=require чтобы pg_restore средство подключается к TLS. Без TLS ошибка может быть прочитана FATAL: SSL connection is required. Please specify SSL options and retry.

В командной строке Windows выполните команду SET PGSSLMODE=require перед выполнением команды pg_restore. В Linux или Bash выполните команду export PGSSLMODE=require перед выполнением команды pg_restore.

В этом примере восстановите данные из файла дампа testdb.dump в базу данных mypgsqldb на целевом сервере mydemoserver.postgres.database.azure.com.

Ниже приведен пример использования этого pg_restore для одного сервера:

pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin@mydemoserver --dbname=mypgsqldb testdb.dump

Ниже приведен пример использования этого pg_restore для гибкого сервера:

pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin --dbname=mypgsqldb testdb.dump

Оптимизация процесса миграции

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

[!NOTE]
Подробные сведения о синтаксисе см. в статьях о pg_dump и pg_restore.

Для резервного копирования

  • Создайте резервную копию с использованием параметра -Fc, чтобы вы могли выполнять восстановление параллельно, что позволит ускорить его. Пример:

    pg_dump -h my-source-server-name -U source-server-username -Fc -d source-databasename -f Z:DataBackupsmy-database-backup.dump

Для восстановления

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

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

  • Для параллелизации восстановления необходимо выполнить восстановление с помощью коммутаторов-FC и-j # . # число ядер на целевом сервере. Также можно попробовать # установить в два раза больше, чем количество ядер целевого сервера, чтобы увидеть влияние. Пример:

Ниже приведен пример использования этого pg_restore для одного сервера:

 pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username@my-target-server -Fc -j 4 -d my-target-databasename Z:DataBackupsmy-database-backup.dump

Ниже приведен пример использования этого pg_restore для гибкого сервера:

 pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username@my-target-server -Fc -j 4 -d my-target-databasename Z:DataBackupsmy-database-backup.dump
  • Можно также изменить файл дампа, добавив команду set synchronous_commit = off; в начале и команду set synchronous_commit = on; в конце. Если не включить ее в конце, прежде чем приложения изменят данные, это может привести к последующей потере данных.

  • Перед восстановлением рассмотрите возможность выполнения следующих действий на целевом сервере Базы данных Azure для PostgreSQL.

    • Отключите отслеживание производительности запросов, так как эти статистические данные не нужны во время миграции. Вы можете сделать это, задав для pg_stat_statements.track, pg_qs.query_capture_mode и pgms_wait_sampling.query_capture_mode значение NONE.

    • Используйте номер SKU с высоким объемом ресурсов вычисления и памяти, например номер с оптимизацией для операций в памяти с 32 виртуальными ядрами, чтобы ускорить миграцию. Вы можете легко вернуться к предпочитаемому номеру SKU после завершения восстановления. Чем выше номер SKU, тем большего параллелизма можно достичь, увеличив значение соответствующего параметра -j в команде pg_restore.

    • Увеличьте число операций ввода-вывода в секунду на целевом сервере. Это может улучшить производительность восстановления. Вы можете подготовить больше операций ввода-вывода в секунду, увеличив объем хранилища на сервере. Этот параметр необратим, но стоит принять во внимание, будет ли большее количество операций ввода-вывода в секунду полезным для вашей рабочей нагрузки в будущем.

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

Следующие шаги

  • Сведения о миграции базы данных PostgreSQL с помощью экспорта и импорта см. в статье Перенос базы данных PostgreSQL с помощью экспорта и импорта.
  • Дополнительные сведения о переносе баз данных в службу «База данных Azure для PostgreSQL» см. в этой статье.

Понравилась статья? Поделить с друзьями:
  • Перенос windows xp на новое железо без переустановки paragon
  • Перенос windows xp на другое железо acronis
  • Перенос windows xp на виртуальную машину virtualbox
  • Перенос pagefile sys на другой диск windows 10
  • Перенос windows xp mode на другой компьютер