Software > WeeWX

Tema para especialistas en BBDD weewx

(1/9) > >>

Xavi-EA5ZF:
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...

Xavi-EA5ZF:
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

Xavi-EA5ZF:
# 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.

Xavi-EA5ZF:
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 !"
--- Fin de la cita ---
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/
--- Fin de la cita ---

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
--- Fin de la cita ---

Chema:
hola
continuando un poco el tema de este hilo y evitar abrir o duplicar otro, me gustaría saber si es posible (explicado paso a paso) que WeeWX haga la mayor parte de sus operaciones en un USB externo (actualizar la BD básicamente y otras operaciones que requieran escritura/lectura de forma asidua ) y así reducir los ciclos de escritura/lectura en la tarjeta SD.

Lo pregunto porque tras seis meses de uso 24/7 de la Raspberry, está empezando a comportarse de forma 'extraña' (pierde la conexión del router de forma imprevisible tardando en volver a estar online minutos o incluso horas) y he pensado que puede ser cosa de la propia tarjeta SD que aunque sólo está al 10% quizás la esté penalizando tanto acceso de escritura/lectura.

saludos.


Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa