Я працюю над гарячою резервною копією для Postgres 9.1 деякий час і зіткнувся з постійною проблемою. Після перезавантаження Postgres на підлеглому сервері файл журналу pgstartup і файл щоденного журналу в каталозі pg_log зчитуються без помилок. Однак, коли я намагаюся зайти в базу даних за допомогою команди psql, я отримую помилку:
FATAL: запускається система бази даних.
Файл recovery.conf також не перетворюється на recovery.done. Я широко досліджував цю помилку і постійно знаходжу ту саму відповідь: база даних не була чисто закрита до того, як я спробував перезапустити Postgres. Єдиний спосіб перезапустити Postgres - це через команди service postgresql-9.1 restartабо /etc/init.d/postgresql-9.1 restart. Після отримання цієї помилки я вбиваю всі процеси і знову намагаюся перезапустити базу даних і все одно отримую ту саму помилку. Я втрачаю, куди поїхати звідси і як виправити це питання. Нижче наведено точний процес, який я здійснив, щоб виконати резервну копію.
Конфігурації головного сервера:
pg_hba.conf, додав рядок:
postgres реплікації хоста IPAddressOfSlaveServer
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 liste_address = '*' порт = 5432 max_wal_senders = 5 wal_keep_segments = 32
Конфігурації підлеглого сервера:
postgresql.conf:
hot_standby = увімкнено
recovery.conf:
standby_mode = увімкнено primar_conninfo = хост = IPAddressOfMasterServer порт = 5432 user = postgres Resto_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Після налаштування обох серверів
Я переходжу на користувача postgres на головному сервері і запускаю команди:
psql -c "Виберіть pg_start_backup ('label", правда); ";
rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave: /var/lib/pgsql/9.1/data \
--виключити postmaster.pid
pgsql -c "вибрати pg_stop_backup ();"
Після синхронізації бази даних з веденим сервером
Я перезапускаю ведений сервер, і запуск не провалюється. У pgstartup.log написано:
Успіх. Тепер ви можете запустити сервер бази даних, використовуючи:
/usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data
або
/usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l запуск журналу
файл журналу поточного дня, postgresql-Thu.log, говорить:
Журнал: вимкнення Журнал: Система бази даних вимкнена Журнал: відновлення системи баз даних було відновлено у 2012-4-10 Журнал: вхід у режим очікування Журнал: відновлений файл журналу "logFileName" з архіву Журнал: стабільний стан відновлення досягнуто 0 / BF0000B0 Журнал: повтор починається з 0 / BF000020 Журнал: відновлений файл журналу "logFileName" з архіву Журнал: несподіваний pageaddr 0/85000000 у файлі журналу 0, сегмент 192, зміщення 0 Журнал: несподіваний pageaddr 0/85000000 у файлі журналу 0, сегмент 192, зміщення 0 Журнал: поточна реплікація успішно підключена до основного
Я досліджував несподіваний pageaddr та з архівів postgres, наскільки я розумію, що це цілком нормально і є одним із очікуваних способів виявити кінець WAL.
Будь-яка порада буде дуже вдячна.