No puedo encontrar el "archivo de historial de la línea de tiempo" para que la replicación funcione

No puedo encontrar el "archivo de historial de la línea de tiempo" para que la replicación funcione

Estoy ejecutando PostgreSQL 9.4, intentando iniciar la replicación.

Lo que estoy haciendo, inspirándome en elinstrucciones en la wikiydocumentación:

  1. SELECT pg_start_backup('clone', true);
  2. rsyncde la base de datos a la posible réplica
  3. SELECT pg_stop_backup();
  4. rsyncde la pg_xlogcarpeta a la posible réplica

Empiezo la réplica y dice:

LOG:  fetching timeline history file for timeline 3 from primary server
FATAL:  could not receive timeline history file from the primary server:
    ERROR:  could not open file "pg_xlog/00000003.history": No such file or directory

Naturalmente estoy buscando el .historyarchivo pg_xlog/en ambos servidores, pero no hay ninguno.

Estoy hojeando los documentos para descubrir que

Para utilizar la copia de seguridad, deberá conservar todos los archivos de segmento WAL generados durante y después de la copia de seguridad del sistema de archivos. Para ayudarle a hacer esto, la función pg_stop_backup crea un archivo de historial de copias de seguridad que se almacena inmediatamente en el área de archivo WAL. Este archivo lleva el nombre del primer archivo de segmento WAL que necesita para la copia de seguridad del sistema de archivos. Por ejemplo, si el archivo WAL inicial es 0000000100001234000055CD, el archivo del historial de copias de seguridad se llamará algo así como 0000000100001234000055CD.007C9330.backup.

Sin embargo, da la casualidad de que después de hacerlo pg_stop_backup()todavía no hay nada como esto pg_xlog/ni en ningún lugar.

Entonces, ¿de dónde obtengo este "archivo histórico de la línea de tiempo"?

Respuesta1

Según elSeis por dospost, es posible que pueda crear un archivo y luego continuar con la configuración de replicación, pero esencialmente es un error de PostgresSQL en el que necesita este archivo aunque no sea aplicable o se elimine según la operación.

Nota: Para Postgresql 10 y versiones posteriores, se cambió el nombre de la función apg_current_wal_lsn()

Cuando PostgreSQL promueve un nuevo servidor primario, crea un marcador de la línea de tiempo dividida en forma de un pequeño archivo de texto ubicado en el directorio de archivos WAL. Este archivo hace posible lograr la recuperación en un punto en el tiempo en algunos escenarios de conmutación por error y conmutación por recuperación bastante complejos.

Entonces parece que tendrás que volver a crear el archivo. Puedes encontrar un muy buen resumen del archivo .history en la wiki de Postgres. Sin embargo, dado que la información está en .pdf, tiende a ser más difícil de indexar, por lo que es posible que tengas problemas para localizar el documento si aún no sabes que está ahí.

Pero nunca volveremos a esa línea de tiempo, porque es anterior a nuestra actualización. Todo lo que necesitaríamos para recrear un archivo perdido es un número suficientemente bueno. Y puedes obtener uno ejecutando:

# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 1/38F70328
(1 row)

Cree un archivo .history en su directorio WAL con estos valores, y listo. La réplica podrá iniciarse inmediatamente.

fuente

Cree el archivo con estos resultados (arriba) pero con el nombre esperado según el error.


Recursos adicionales

  • Comprender las líneas de tiempo de PostgreSQL

  • Funciones de administración del sistema

    Nombre: pg_current_xlog_location()

    Tipo de devolución: texto

    Descripción: Obtener la ubicación de escritura del registro de transacciones actual

    pg_current_xlog_locationmuestra la ubicación de escritura del registro de transacciones actual en el mismo formato utilizado por las funciones anteriores. De manera similar, pg_current_xlog_insert_location muestra el punto de inserción del registro de transacciones actual. El punto de inserción es el final "lógico" del registro de transacciones en cualquier instante, mientras que la ubicación de escritura es el final de lo que realmente se ha escrito desde los buffers internos del servidor. La ubicación de escritura es el final de lo que se puede examinar desde fuera del servidor y, por lo general, es lo que desea si está interesado en archivar archivos de registro de transacciones parcialmente completos. El punto de inserción está disponible principalmente para fines de depuración del servidor. Ambas son operaciones de solo lectura y no requieren permisos de superusuario.

    Puede utilizar pg_xlogfile_name_offsetpara extraer el nombre del archivo de registro de transacciones correspondiente y el desplazamiento de bytes de los resultados de cualquiera de las funciones anteriores.

    De manera similar, pg_xlogfile_nameextrae solo el nombre del archivo de registro de transacciones. Cuando la ubicación del registro de transacciones dada está exactamente en el límite del archivo de registro de transacciones, ambas funciones devuelven el nombre del archivo de registro de transacciones anterior. Este suele ser el comportamiento deseado para administrar el comportamiento de archivado del registro de transacciones, ya que el archivo anterior es el último que debe archivarse actualmente.

    fuente

información relacionada