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 restart
o /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.
fuente
Curiosamente, resolví esto de la manera opuesta a la de Paul.
Yo añadí:
hot_standby = on
o, más bien, cambiado
#hot_standby = off
a lo anterior. (Esto estaba usando 9.5)fuente
Tengo esto en los registros:
Para arreglar el inicio infinito del servidor, haga esto: Detenga el servicio (si existe), elimine el proceso 'postgres' (generalmente existe). Ejecute esto en la consola:
Este problema aparece porque el directorio xLog tiene datos que no se deben escribir antes de que se cierre el servicio. Y luego, al iniciar el servicio, intenta corregir esos datos. A veces se congela el inicio y nunca termina. Comando en la parte superior, limpie estos datos no fijados, que aplican el servicio para comenzar solo con datos fijos. Tal vez se perderán algunas partes de los datos no fijados, pero el servidor de la base de datos se ejecutará normalmente y las aplicaciones podrán acceder a ellas.
fuente