He estado trabajando en una copia de seguridad en caliente para Postgres 9.1 por un tiempo y me he encontrado con un problema constante. Después de reiniciar Postgres en el servidor esclavo, el archivo de registro pgstartup y el archivo de registro diario en el directorio pg_log se lee sin errores. Sin embargo, cuando intento ingresar a la base de datos usando el comando psql, aparece el error:
FATAL: el sistema de base de datos se está iniciando.
El archivo recovery.conf tampoco se convierte en recovery.done. He investigado ampliamente este error y constantemente encuentro la misma respuesta: la base de datos no se ha cerrado limpiamente antes de intentar reiniciar Postgres. Las únicas formas en que he reiniciado Postgres es a través de los comandos service postgresql-9.1 restarto /etc/init.d/postgresql-9.1 restart. Después de recibir este error, elimino todos los procesos e intento nuevamente reiniciar la base de datos y sigo recibiendo el mismo error. No sé a dónde ir desde aquí y cómo solucionar este problema. A continuación se muestra el proceso exacto que he realizado para completar la copia de seguridad en caliente.
Configuraciones del servidor maestro:
pg_hba.conf, agregó la línea:
host replication postgres IPAddressOfSlaveServer trust
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' puerto = 5432 max_wal_senders = 5 wal_keep_segments = 32
Configuraciones del servidor esclavo:
postgresql.conf:
hot_standby = on
recovery.conf:
standby_mode = on primary_conninfo = host = IPAddressOfMasterServer puerto = 5432 usuario = postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Después de configurar ambos servidores
Me cambio al usuario postgres en el servidor maestro y ejecuto los comandos:
psql -c "Seleccione pg_start_backup ('etiqueta', verdadero);";
rsync -a -v -e ssh /var/lib/pgsql/9.1/data esclavo: /var/lib/pgsql/9.1/data \
--excluye postmaster.pid
pgsql -c "seleccione pg_stop_backup ();";
Después de sincronizar la base de datos con el servidor esclavo
Reinicio el servidor esclavo y el inicio no falla. El pgstartup.log lee:
Éxito. Ahora puede iniciar el servidor de bases de datos usando:
/usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data
o
/usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start
el archivo de registro del día actual, postgresql-Thu.log, lee:
Registro: apagado Registro: el sistema de base de datos está apagado Registro: el sistema de base de datos se cerró en recuperación en 2012-4-10 Registro: entrar en modo de espera Registro: archivo de registro restaurado "logFileName" del archivo Registro: estado de recuperación constante alcanzado en 0 / BF0000B0 Registro: rehacer comienza en 0 / BF000020 Registro: archivo de registro restaurado "logFileName" del archivo Registro: pageaddr inesperado 0/85000000 en el archivo de registro 0, segmento 192, desplazamiento 0 Registro: pageaddr inesperado 0/85000000 en el archivo de registro 0, segmento 192, desplazamiento 0 Registro: replicación de transmisión conectada correctamente a la primaria
Investigué pageaddr inesperado y de los archivos de postgres, tengo entendido que es bastante normal y una de las formas esperadas para detectar el final de WAL.
Cualquier consejo sería muy apreciado.