Aaaaaa. Rozsypała mi się baza Domoticz! Co robić, co robić?
A 'rozsypać' się może z różnych powodów. Błąd zapisu na kartę, zanik napięcia, przejście w Domoticz z wersji stable na beta i z powrotem na stable.
Jaki jest objaw? W logach Domoticz widzimy informację
'...Database is malformed...'.
U mnie konkretnie był problem z LightingLog - odpowiada on za przetrzymywanie danych archiwalnych o czujnikach - błąd był przy nocnym czyszczeniu tej tabeli. A to skutkowało zwiększoną wielkością bazy danych. U Was może być różnie. Jest to w końcu baza plikowa, bez serwisu który dba o integralność danych, itp.
Najpierw
sudo apt-get install sqlite3
Trzeba też zatrzymać serwis Domoticz
sudo service domoticz stop
Następnie
cd domoticz
sqlite3 domoticz.db
pragma integrity_check;
Nie jest dobrze! Błędy, jak widać, są i to dość dużo. Spróbujemy poradzić sobie z nimi na razie najprostszą metodą - zrzucenie struktury bazy i danych do pliku ponowne załadowanie. W 99% przypadków powinno pomóc.
Skoro jest źle - trzeba działać!
Startujemy:
sqlite3 domoticz.db
.dump
.exit
Co zrobiliśmy? Poleciliśmy SQLite, aby wyeksportował całą naszą bazę (wraz ze strukturą) do pliku dump.sql
Teraz załadujemy ten plik już do nowej bazy. Jak to może nam pomóc? Ano wyeksportowana została poprawna struktura tabel oraz danych z bazy, także teraz tą dobrą wrzucimy do nowej. Wszystkie dane powinny zostać poprawne. W moim konkretnym przypadku tak było - mam nadzieję, że i u Was nie będzie to nic poważniejszego.
Załadowaliśmy nasze dane do bazy domoticz1.db.
Sprawdźmy, dla pewności, czy faktycznie nam to pomogło.
Wygląda dobrze, wystarczy zastąpić domoticz.db plikiem domoticz1.db i uruchomić domoticz.
sudo service domoticz start
Jaki jest objaw? W logach Domoticz widzimy informację
'...Database is malformed...'.
U mnie konkretnie był problem z LightingLog - odpowiada on za przetrzymywanie danych archiwalnych o czujnikach - błąd był przy nocnym czyszczeniu tej tabeli. A to skutkowało zwiększoną wielkością bazy danych. U Was może być różnie. Jest to w końcu baza plikowa, bez serwisu który dba o integralność danych, itp.
Najpierw
sudo apt-get install sqlite3
Trzeba też zatrzymać serwis Domoticz
sudo service domoticz stop
Następnie
cd domoticz
sqlite3 domoticz.db
pragma integrity_check;
Nie jest dobrze! Błędy, jak widać, są i to dość dużo. Spróbujemy poradzić sobie z nimi na razie najprostszą metodą - zrzucenie struktury bazy i danych do pliku ponowne załadowanie. W 99% przypadków powinno pomóc.
Skoro jest źle - trzeba działać!
Startujemy:
sqlite3 domoticz.db
.mode insert
.output dump.sql.dump
.exit
Co zrobiliśmy? Poleciliśmy SQLite, aby wyeksportował całą naszą bazę (wraz ze strukturą) do pliku dump.sql
Teraz załadujemy ten plik już do nowej bazy. Jak to może nam pomóc? Ano wyeksportowana została poprawna struktura tabel oraz danych z bazy, także teraz tą dobrą wrzucimy do nowej. Wszystkie dane powinny zostać poprawne. W moim konkretnym przypadku tak było - mam nadzieję, że i u Was nie będzie to nic poważniejszego.
sqlite3 domoticz1.db < dump.sql
Załadowaliśmy nasze dane do bazy domoticz1.db.
Sprawdźmy, dla pewności, czy faktycznie nam to pomogło.
Wygląda dobrze, wystarczy zastąpić domoticz.db plikiem domoticz1.db i uruchomić domoticz.
sudo service domoticz start
Gotowe!
Wiele tutaj interesujących i ważnych informacji.
OdpowiedzUsuń