Назад | Перейти на главную страницу

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

У меня есть резервная копия каталога данных PostgreSQL 8.3. Мне нужно скопировать базу данных из этой резервной копии в новый экземпляр PostgreSQL. Из-за проблем со старым сервером я не могу выполнить pg_dump базы данных.

Я выяснил, в каком каталоге находится рассматриваемая база данных. В MySQL, например, все, что вы обычно делаете, - это выключите сервер, скопируйте каталог и перезапустите его, и база данных станет доступной. Теперь это не работает с PostgreSQL, и я подозреваю, что это потому, что база данных не указана в файле global / pg_database. Кажется, что этот файл создается автоматически при запуске PostgreSQL, так как я могу сообщить системе, что база данных существует?

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

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

  1. Получите postgresql.conf, который соответствует конфигурации на новом хосте (ориентируйтесь по файлам в старом (которые вы меняете здесь) и новым каталогам данных)
  2. Узнайте имя пользователя суперпользователя PostgreSQL старой установки - скорее всего, postgres.
  3. Создайте это имя пользователя (пользователь UNIX) на новом хосте, если оно еще не существует.
  4. Дайте (chown) старый каталог данных этому пользователю, если uid не совпадает с таковым на старом сервере.
  5. Настройте pg_hba.conf в старом каталоге данных, чтобы разрешить соединения от локальных пользователей с тем же именем пользователя postgres (обычно это значение по умолчанию, но проверьте).
  6. Запустите старый кластер базы данных от имени пользователя UNIX с тем же именем, что и суперпользователь старого каталога данных, например для пользователя postgres:
    sudo -u postgres postgres -D old_data_directory
    
    

    или с su:

    su postgres postgres -D old_data_directory
  7. выгрузите старую базу данных, снова с обычным именем пользователя, postgres:
    sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql
    
    

    становится postgres с su, аналогичным приведенному выше

  8. адаптировать dump_file.sql к именам пользователей нового сервера и т. д .; создать там пустую базу данных с соответствующим владельцем
  9. сканировать базу данных на новый сервер:
    sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name
    
    

    еще раз, получив привилегии postgres, используя su аналогично приведенному выше

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