es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Copia de seguridad en tiempo real de SQL mediante una conexión intermitente.

Tengo algunas PC que tienen bases de datos locales de PostgreSQL en ejecución, simplemente registrando datos. Los datos solo se insertan y nunca se eliminan ni actualizan. Las PC remotas están conectadas a internet mediante un módem celular y, dependiendo de su ubicación, a menudo no tienen acceso a internet. Cuando tienen conexión a internet, me gustaría que envíen una copia de sus bases de datos a una ubicación central y mantengan la base de datos remota actualizada con los nuevos datos. Básicamente, necesito un ‘rsync’ para bases de datos.

Al principio parecía que lo que necesitaba era configurar una réplica en caliente de PostgreSQL, pero no estoy seguro si esto es lo que realmente necesito porque mi situación parece ser diferente a los ejemplos que he visto.

  1. Cada PC remota tiene un servidor Postgres con una sola base de datos que tiene un nombre único, las tablas dentro de las bases de datos tienen nombres genéricos. Me gustaría sincronizar estas bases de datos en un solo servidor Postgres remoto. Creo que esto debería estar bien debido a los nombres de base de datos únicos.
  2. Mi conectividad es muy intermitente, a veces pasan días o semanas sin conexión. He visto que PgAdmin es muy confiable a pesar de una conexión a internet terrible (celular), si lo mismo ocurre con Postgres en réplica en caliente, puedo estar bien.

Según puedo ver, mis opciones son configurar una réplica en caliente de PostgreSQL o crear mi propia solución. No quiero crear mi propia solución. Sin embargo, es lo suficientemente simple si no encuentro algo mejor: un demonio de Python administrado por systemd para encontrar la diferencia entre la base de datos local y la remota, luego enviar las filas nuevas de la base de datos local a la remota. Pero estoy seguro de que alguien ha resuelto este problema, simplemente no he encontrado la solución aún.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para sincronizar bases de datos PostgreSQL locales a una ubicación central con conexión intermitente a internet utilizando funcionalidad similar a rsync

    Según los requisitos, parece que configurar PostgreSQL Hot-Standby puede no ser la mejor solución para este escenario. En cambio, una solución personalizada que utiliza funcionalidad similar a rsync para sincronizar las bases de datos podría ser una solución más adecuada.

    Una posible solución es utilizar una combinación de rsync y la utilidad pg_dump para transferir los datos entre las bases de datos locales y remotas. Aquí hay los pasos involucrados:

    En el servidor de la base de datos local:

    1. Configure una tarea cron para que se ejecute periódicamente el siguiente comando:

    pg_dump -U <nombre_de_usuario> -h localhost <nombre_de_basede_datos> | gzip > /ruta/para/archivo_volcado.sql.gz

    Esto creará un archivo de volcado comprimido de la base de datos local en una ubicación especificada.

    1. Configure rsync para transferir el archivo de volcado al servidor remoto cuando haya conexión a internet disponible. Aquí hay un ejemplo de comando:

    rsync -avz /ruta/para/archivo_volcado.sql.gz usuario@servidor_remoto:/ruta/a/ubicacion_remota

    Este comando transferirá el archivo de volcado comprimido al servidor remoto cuando haya conexión a internet disponible.

    En el servidor de la base de datos remota:

    1. Configure una tarea cron para que se ejecute periódicamente el siguiente comando:

    gzip -dc /ruta/para/archivo_volcado.sql.gz | psql -U <nombre_de_usuario> -h localhost <nombre_de_basede_datos>

    Este comando descomprimirá el archivo de volcado e insertará los nuevos datos en la base de datos remota.

    1. Configure rsync para transferir el archivo de volcado desde el servidor local al servidor remoto cuando haya conexión a internet disponible. Aquí hay un ejemplo de comando:

    rsync -avz usuario@servidor_local:/ruta/para/archivo_volcado.sql.gz /ruta/a/ubicacion_remota

    Este comando transferirá el archivo de volcado comprimido desde el servidor local al servidor remoto cuando haya conexión a internet disponible.

    Al combinar rsync y pg_dump, esta solución proporciona una forma de sincronizar las bases de datos cuando hay conexión a internet disponible. Aunque requiere una configuración inicial, una vez implementada, es probable que sea confiable y resistente a la conectividad intermitente.

Comments are closed.