Восстановите pg_basebackup в Linux, который был создан из кластера базы данных, размещенного в Windows.

В настоящее время я занимаюсь исследованием того, как настроить потоковую репликацию для архитектуры HA postgresql. Но этот вопрос актуален и для нас при резервном копировании/восстановлении и обслуживании в смешанных средах в целом.

Наш «основной» сервер postgresql работает на компьютере с Windows. Я использую pg_dump для ежедневного создания логических резервных копий, а также pg_basebackup и архивирование WAL для создания полной резервной копии, которая должна обеспечивать PITR (я еще не проверял это).

Следующим шагом является настройка ведомой машины, которая содержит реплику посредством потоковой репликации. Благодаря лучшей поддержке экосистемы postgresql этот новый хост работает под управлением Ubuntu Server 16.04 LTS.

  1. С помощью pg_basebackup -h <main host> -D <datadirectory> --xlog-method=stream я инициализировал подчиненный каталог данных.
  2. Затем мне пришлось исправить некоторые символические ссылки на файлы табличного пространства, так как они указывали на пути Windows, а не на файловую систему Linux.
  3. Затем я создал файл recovery.conf с standby_mode = on и информацией о подключении.
  4. Я проверил, что сервер настроен как hot_standby = on и запустил демон

Теперь я сталкиваюсь с проблемами, поскольку postgres сообщает мне, что "локаль базы данных (English_United_States.1252, которая, очевидно, специфична для Windows) несовместима с операционной системой"

Что ж, я знаю, что 1252 — это локаль, специфичная для Windows, и что я должен использовать en_US.UTF8 в Linux, НО в смешанной среде, подобной этой, я должен:

  • Инициировать нашу основную БД в Windows также с локалью en_US.UTF8?
  • Это вообще возможно?
  • Почему формат pg_basebackup зависит от операционной системы или существует другой формат резервной копии?
  • Есть ли какой-либо флаг командной строки для перевода этого?
  • Я также был бы признателен за использование только Linux (или даже только Windows), но я боюсь, что наши клиенты будут полагаться на обе операционные системы довольно долго.

person Jürgen Zornig    schedule 28.06.2017    source источник
comment
Потоковая репликация из Pg в Windows в Linux или наоборот не поддерживается.   -  person Craig Ringer    schedule 28.06.2017
comment
как вы делаете логическое резервное копирование с помощью pg_basebackup?.. вы должны использовать pg_dump для перехода с одной ОС на другую   -  person Vao Tsun    schedule 28.06.2017
comment
@VaoTsun, как я уже писал, делаю оба (pg_dump, pg_basebackup) для целей резервного копирования. Для передачи базы данных с одного хоста на другой для инициализации потоковой репликации я использую pg_basebackup   -  person Jürgen Zornig    schedule 28.06.2017
comment
@CraigRinger, даже когда я перемещаю базу данных через pg_dump, как упоминает VaoTsun?   -  person Jürgen Zornig    schedule 28.06.2017
comment
тогда комментарий @CraigRinger - лучший ответ   -  person Vao Tsun    schedule 28.06.2017
comment
для потоковой репликации требуется безопасная двоичная копия файла данных - pg_backup или rsync - другая ОС не будет просто принимать такие файлы. pg_dump не копирует файл, а только данные и поэтому не может использоваться для потоковой репликации.   -  person Vao Tsun    schedule 28.06.2017
comment
pg_dump не pg_basebackup. Вы должны быть в состоянии использовать pg_dump, но вы говорили о pg_basebackup выше.   -  person Craig Ringer    schedule 28.06.2017
comment
поскольку я пометил свой вопрос стратегиями резервного копирования и высокой доступностью и задавал вопросы, указывающие на эти аспекты, я благодарю вас за ваши предложения. Четкий ответ, как это сделал Лоренц, кажется возможным в соответствии с моими вопросами.   -  person Jürgen Zornig    schedule 28.06.2017


Ответы (1)


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

Также в таком сценарии невозможна потоковая репликация.

Начиная с PostgreSQL v10, вы можете рассмотреть возможность логической репликации.

person Laurenz Albe    schedule 28.06.2017
comment
спасибо за разъяснения, я боялся, что это так. Также большое спасибо за предложение pglogical (2ndquadrant.com/en/resources/pglogical ), который я буду изучать в качестве расширения для postgres-9.6. - person Jürgen Zornig; 28.06.2017
comment
Я ничего не скажу против pglogical, но он отличается от логической репликации, поставляемой с v10. Если вы можете подождать до тех пор, я бы сделал это. - person Laurenz Albe; 28.06.2017