Autor Tema: Tema para especialistas en BBDD weewx  (Leído 675 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Xavi-EA5ZF

  • Full Member
  • ***
  • Mensajes: 199
  • Ham Radio Operator EA5ZF
    • Ver Perfil
    • MeteoLaVall
  • Estación: ESPVA1200000012600A
Tema para especialistas en BBDD weewx
« en: 19 de Julio del 2018, 19:07:31 pm »
Hola, se  me ha terminado la buena suerte y como no, en periodo estival en el que no resido en la misma casa y no puedo hacer el mismo mantenimiento de la web, me he dado cuenta de que he tenido un cata-crash en el weewx, y ahora voy a tener que pensar en una estrategia adecuada para la mejor recuperación del contenido.
El tema es que un día petó el sistema weewx, dándo un mensaje de database is malformed.
Eso parece indicar que la memoria en la que está se ha dañado, y con ella parte de la BBDD.
El problema es que lo indicado es recuperar un backup anterior y actualizar desde él aprovechando la memoria de la estación, pero al revisar un poco los log veo que ya hace días que estaba avisando.
El tema  es que puedo retrotraerme a una sana de hace un mes o mas y luego he de actualizar, pero no puedo hacerlo desde la consola y debo hacerlo desde lo que pueda exportar desde la base de datos que hoy  mismo está activa.
No sé cual sería la mejor forma de hacerlo, supongo que una vez copiada la base de datos anterior, había que ir sacando via SQL los datos modificados de la base de datos e ir metiéndolos via importación.
Supongo que el comando sería tabla a tabla parecido a este:
SELECT * FROM nombre_tabla WHERE DATETIME > epoch_final_bbdd_antigua;
y exportando esto a CSV para luego importarlas una a una cada una de las mas de 40 tablas.
Es correcto o hay alguna forma mejor?

El comando .DUMP avisa que hay errores y no me fío de utilizarlo, aunque no sé que podría pasar si recupero la base de datos anterior y luego le doy a importar el DUMP eliminando sus comandos iniciales de borrado de las tablas.

Lo dicho, el tema es para especialistas...

Desconectado Xavi-EA5ZF

  • Full Member
  • ***
  • Mensajes: 199
  • Ham Radio Operator EA5ZF
    • Ver Perfil
    • MeteoLaVall
  • Estación: ESPVA1200000012600A
Re:Tema para especialistas en BBDD weewx
« Respuesta #1 en: 31 de Julio del 2018, 20:45:48 pm »
Bueno, el tema parece que ya lo he resuelto.
Aviso a navegantes: la BBDD estaba corrupta desde hace meses y el weewx no avisaba.
How-to:
He estado mirando diferentes copias de la BBDD hasta encontrar una tabla archive con todos los datos y que no tenga ningún error.
El error se nota en que no te informa del nº real de registros o bien si al exportar datos da el error de "database malformed"
Una vez con una copia correcta pero desactualizada de la BBDD he exportado la tabla archive.
Desde diferentes copias mas actuales de la BBDD he exportado y aislado los datos complementarios para actualizarla a fecha de hoy, al final he tenido que mezclar datos de 4 bases de datos diferentes para completar el total de días y no perder nada.
Una vez todo esto en ficheros de texto SQL, el tema es crear una BBDD vacía y nueva e importar los datos de las tablas archive previamente exportados.
Me hice un excel para ir controlando y no perder nada:
Desde epochtime xxxx a yyyy
desde epochtime yyyyy a zzzzz ... etc
Una vez todo importado, la base de datos es correcta y ya no muestra lo de malformed, solo falta recrear las tablas accesorias con el wee_database -- rebuild_diary (creo recordar que es así)

Todo esto me ha hecho pensar en una estrategia buena para próximas ocasiones, creo que lo mejor es alternar varios tipos de copia, por una parte la fisica que es copiar el fichero weewx.sdb del directorio /var/lib/weewx y por otra ir haciendo exportaciones de datos e ir controlando que no se hagan con errores.
Para esto hay que entrar en la bbdd con sqlite3 indicarle un fichero para el dump (el dump es un fichero de texto plano SQL) y luego realizarlo:
sqlite3 /var/lib/weewx/weewx.sdb
.output backup.dmp
.dump
.quit

o bien:
sqlite3 /var/lib/weewx/weewx.sdb
.output backup.dmp
select * from archive;
.quit

Me falta hacer el script para automatizarlo, como no tengo tiempo por temas familiares graves en un próximo capitulo iré probando y actualizando el post con el script resultante.
Saludos.
Xavi
« Última modificación: 31 de Julio del 2018, 23:16:31 pm por Xavi-EA5ZF »

Desconectado Xavi-EA5ZF

  • Full Member
  • ***
  • Mensajes: 199
  • Ham Radio Operator EA5ZF
    • Ver Perfil
    • MeteoLaVall
  • Estación: ESPVA1200000012600A
Re:Tema para especialistas en BBDD weewx
« Respuesta #2 en: 01 de Agosto del 2018, 06:04:06 am »
# Copia de la base de datos weewx semanalmente
5  0    * * 1 root /home/pi/dump_archive >dev/null
10 0    * * 1 root /home/pi/dump_weewx >dev/null

Añadir esto al crontab y he puesto en /home/pi dos ficheros, uno para la tabla archive y el otro para el dump de la base de datos total.
cd /home/pi
sqlite3 /var/lib/weewx/weewx.sdb .dump > dump_backup.txt


y el otro:
cd /home/pi
sqlite3 /var/lib/weewx/weewx.sdb 'select * from archive;' > dump_archive.txt

A partir de aquí cada cual que piense y haga lo que decida... copia física, copia lógica o ambas o ninguna.

Desconectado Xavi-EA5ZF

  • Full Member
  • ***
  • Mensajes: 199
  • Ham Radio Operator EA5ZF
    • Ver Perfil
    • MeteoLaVall
  • Estación: ESPVA1200000012600A
Re:Tema para especialistas en BBDD weewx
« Respuesta #3 en: 02 de Octubre del 2019, 19:04:06 pm »
He encontrado una posible solución a la corrupción de datos de la BBDD de weewx.
Aparte de una buena y sana politica de realización de copias de la BBDD, adjuntaré un script para sanear la BBDD que al menos a mí me ha ayudado a volver a tener la BBDD operativa.
En mi caso no se ha perdido ningún dato, pero nunca está de mas tras la recuperación hacer algunas pruebas y cerciorarse de la continuidad de los datos almacenados.
El script es este;
Citar
#!/bin/sh
#
# repairsdb.sh
#
# requires sqlite3 (apt install sqlite3)
# adjust following line with path/file.sdb
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump corrupted sqlite file $DBFILE to $DBFILE.dump.gz"
echo '.dump' | sqlite3 $DBFILE | gzip -c >$DBFILE.dump.gz
# backup sdb
echo "Rename corrupted sqlite file $DBFILE to $DBFILE.backup"
mv $DBFILE $DBFILE.backup
# rebuild sdb from dump
echo "Building proper sqlite file $DBFILE from dump $DBFILE.dump.gz"
zcat $DBFILE.dump.gz | sqlite3 $DBFILE
echo "Done !"
Espero que sea de utilidad.

Adjunto también la utilidad de dump de la BBDD:
Citar
#!/bin/sh
#
# dump_archive.sh
#
# requires sqlite3 (apt install sqlite3)
# adjust following line with path/file.sdb
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump BBDD archive file $DBFILE to $DBFILE.dump.gz"
echo '.dump' | sqlite3 $DBFILE | gzip -c >$DBFILE.dump.gz
mv $DBFILE.dump.gz /home/pi/

Y la de exportación de todos los datos...
Citar
cd /home/pi
# sqlite3 /var/lib/weewx/weewx.sdb 'select * from archive;' > dump_archive.txt
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump sqlite archive file $DBFILE to $DBFILE.dump.gz"
echo 'select * from archive;' | sqlite3 $DBFILE | gzip -c >/home/pi/dump_archive.txt.gz