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

Репликация в PG 9 между Windows и Linux

У меня PostgreSQL 9 работает под Windows 2003 SP2. Я пытаюсь воспроизвести его в системе Fedora 12 с PostgreSQL 9.

Я получаю это сообщение об ошибке:

/usr/pgsql-9.0/bin/postgres -D /var/lib/pgsql/9.0/data/ -p 5432
2011-02-11 17:43:26 ISTFATAL:  incorrect checksum in control file

Из-за ограничений брандмауэра я не мог следовать официальные инструкции буквально. Вместо этого я заархивировал содержимое каталога данных, когда сервер был отключен, и скопировал его в ящик Linux. Я проверил оба каталога и не обнаружил несоответствий. Я изменил права так, чтобы только postgres пользователь и группа имели доступ к файлам.

Что я могу сделать, чтобы репликация работала? Я пробовал использовать pg_dumpall, но система жалуется, что идентификаторы базы данных не совпадают.

Чтобы использовать потоковую репликацию, вы должны использовать одни и те же версии PostgreSQL в одних и тех же операционных системах. Windows и Fedora - это разные ОС, которые не подходят для потоковой репликации.

Если вам нужна репликация между разными версиями и / разными ОС, вы можете взглянуть на Slony.

Сделал это, используя Postgresql 9.5.21 в качестве мастера на Windows 2012 R2 и раб на Ubuntu 14.04.

Вы должны позаботиться о нескольких вещах:

  • наиболее похожий CPU (размер страницы, архитектура, регистры). Итак, вы не можете смешивать 64/32-битные или использовать ЦП с другим порядком байтов или размером страницы;
  • такой же порядок следования байтов и для ОС: 32 или 64 бит;
  • та же основная версия PG: 9.5.x с той же или другой версией 9.5.x (это для потоковой репликации, которую я использую, логическая репликация работает с разными версиями PG);

Итак, я нахожу уже установленный PG на Windows Server. редактировать postgresql.conf для включения реплики и PITR, и pg_hba.conf чтобы разрешить соединение.

Затем перешел на Ubuntu, и, остановив PG, я получил от мастера:

pg_basebackup -D /tmp/db/ -X stream -R -U postgres -h ip-master

Затем изменили конфигурацию и заменили каталог данных на /tmp/db.

Запустите подчиненное устройство, оно работает, но посмотрите на это:

2020-03-18 21: 05: 31.598 CET [44640] LOG: система базы данных готова принимать соединения только для чтения

2020-03-18 21: 05: 31.631 CET [44645] LOG: началась потоковая передача WAL с основного в 36 / C2000000 на временной шкале 1

2020-03-18 21: 05: 31.905 CET [44646] [unknown] @ [unknown] LOG: неполный стартовый пакет

2020-03-18 21: 05: 32.416 CET [44649] postgres @ postgres FATAL: языковой стандарт базы данных несовместим с операционной системой

2020-03-18 21: 05: 32.416 CET [44649] postgres @ postgres ДЕТАЛИ: база данных была инициализирована с помощью LC_COLLATE "Italian_Italy.1252", который не распознается setlocale ().

2020-03-18 21: 05: 32.416 CET [44649] postgres @ postgres СОВЕТ: воссоздайте базу данных с другим языковым стандартом или установите отсутствующий языковой стандарт.

Вот что забавно: репликация работает, но вы не можете подключиться к базам данных.

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

Конечно, если вы воссоздадите кластер с UTF-8, проблем не возникнет.

n.b .: большое спасибо incognito и ilmari на официальном канале IRC PG за подсказками.