V minulém článku jsem popisoval, jak zálohovat Raspberry PI na Synology NAS. Zálohování řeším zejména z toho dlvodu že potřebuji mít jistotu, že nepřijdu o data uložená v databázi InfluxDB, kam ukládám veškeré statistiky, které se týkají chytrého domu. Jenže, obnova surových dat z InfluxDB není úplně jednoduchá, i když to taky jde. Daleko lepší pravidelně pořizovat nativní zálohu databáze a tu potom od-zálohovat jinam mimo Raspberry, třeba na NAS.

Oficiální dokumentace říká, že zálohu lze provést pomocí příkazu

influxd backup -portable <cíl pro uložení zálohy>

Tento příkaz provede zálohu celé databáze InfluxDB. Pomocí parametrizace skriptu, ze definovat konkrétní databázi, která se má zálohovat. Já potřebuji zálohovat kompletní databázi, takže skript více parametrizovat nepotřebuji.

Jenže, to nestačí. Člověk je tvor líný a nechce pravidelně spouštět skript. Proto je dobré naplánovat pravidelné spouštění pomocí cronu. Editaci cronu zahájíte příkazem

crontab -e

Otevře se okno (editor), ve kterém už možná nějaké naplánované úlohy máte. Na nový řádek tedy zadáme, že chceme výše uvedený skript spouštět jednou denně (vždy 5 minut po půlnoci). DO editoru tedy vložíme

0 5 * * * sudo influxd backup -portable /data/backups/influxdb/

Po uložení se nám každou noc spustí skript, který provede kompletní zálohu InfluxDB.

Mohlo by se zdát, že máme hotovo. Opak je pravdou. Pokud bychom celý koncept zálohování ponechali v tomto stavu, po čase by nám došlo místo na RPi a pravděpodobně i na NAS, protože, jak jsem již uvedl, každý den se spustí kompletní záloha databáze. Tento problém lze vyřešit dvěma způsoby. Buďto zálohovací příkaz parametrizovat dle dokumentace a definovat OD kdy DO kdy se má záloha provádět, tzn každý den definovat například data za posledních 24 hodin a řešit tak jen přírůstky. Asi dobrý koncept, ale já vidím riziko v tom, že pokud dojde k jakémukoliv výpadku naplánované úlohy, nemusím mít zálohována kompletní data. Pokud například vypadne proud a jsem na dovolené, tak RPi nebude provádět týden zálohování. Až jej zapnu, provede se další pravidelná záloha, která bude ale zahrnovat pouze data za posledních 24 hodin. No nic moc.

Daleko zajímavější mi připadne nápad, nechat denně provádět kompletní zálohu s tím, že zálohy starší než X dní se automaticky z úložiště vymažou. Vytvoříme si tedy obslužný skript, který nám toto zajistí.

sudo nano <cesta kam ukládáte skripty>/influxdbRemoveOldBackups.sh

Sudo použijte v případě, kdy jste přihlášeni pod uživatelem, který nativně nemá oprávnění k dané cestě

Do souboru vložte text

#!/bin/bash
if [ $2 -gt 0 ]
then
# smazat soubory starsi nez $3
find $1/* -mtime +$2 -exec rm {} \;
fi

Skript obsahuje 2 parametry

$1 – cesta ke složce se zálohami

$2 – počet dní, po které chci zálohy v adresáři ponechat

Nyní opět otevřeme editaci cronu

crontab -e

A na nový řádek vložíme text

0 15 * * * sudo sh <cesta kam ukládáte skripty>/influxdbRemoveOldBackups.sh <cesta ke složce se zálohami> <počet dní>

například

0 15 * * * sudo sh /data/backups/_scripts/influxdbRemoveOldBackups.sh /data/backups/influxdb/ 3

Každý den v 00:15 proběhne pročištění složky se zálohami. V mém případě se odstraní zálohy, které jsou starší než 3 dny. Tím mám jistotu, že na RPi budou uložeby vždy poslední 3 zálohy a tyto budou také přeneseny na Synology NAS.

Obnova dat

Obnova dat je naprosto stejná, jako jejich záloha. V první řadě je potřeba přesunout zálohy z externího úložiště na Raspberry PI, klidně do složky, kam pravidelně ukládáte zálohy. Následně již jen stačí spustit příkaz

influxd restore -portable <cesta ke složce se zálohami>

Předpokladem je, že vaše InfluxDB je nainstalovaná a běží. I příkaz pro obnovu dat se dá parametrizovat. Stačí opět nahlédnout do oficiální dokumentace.

Jak zálohovat InfluxDB
Štítky:                    

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.