Migracja z MariaDB do SQLite i zmniejszanie rozmiaru bazy danych - mam z tym problem :)

Cześć
Mam bazę danych MariaDB, która waży prawie 50GB.


Chciałem ją oczyścić ze zbędnych wpisów, które nazbierały się przez kilka lat używania.
Uruchomiłem Akcje taką jak poniżej licząc że zmniejsze rozmiar bazy i zostaną tylko dane z ostatnich 365 dni. Jednak to nie przyniosło rezultatu. Baza nadal ma tą samą wielkość. Jak ją obczyścić i zmniejszyć jej rozmiar? Interesują mnie w niej dane z około 100 encji, które mam wypisane w pliku. Wcześniej zbierała ona dane z około 900 encji.

Drugi mój problem to konwersja dump’u bazy na sqllite - zrobiłem testowy zrzut mojej bazy

mariadb-dump -u homeassistant -p homeassistant --skip-ssl > /config/ha_backup.sql

a następnie

sqlite3 /config/home-assistant_v2.db < /config/ha_backup.sql

Od razu w terminalu zaczęło sypać błędami. Próbowałem dostosowywać ten zrzut do sqlite ale bez rezultatów. Próbowałem np takiego polecenia:

sed -i \
  -e 's/unsigned//g' \
  -e '/LOCK TABLES/d' \
  -e 's/ENGINE=InnoDB//g' \
  -e 's/DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci//g' \
  -e 's/AUTO_INCREMENT//g' \
  -e 's/ON UPDATE CURRENT_TIMESTAMP//g' \
  -e 's/UNSIGNED//g' \
  -e '/Cannot read properties of null/d' \
  -e '/parentNode/d' \
  -e '/transaction/d' \
  /config/ha_backup.sql

Proszę o pomoc bo nie wiem jak sobie z tym poradzić.

Zacznij od recordera i wykluczenia tego co jest ci nie potrzebne w bazie, spójrz na twoją tabelę state_attributes 22GB. Zamiast phpmyadmin dla mariadb użyj HeidiSQL https://www.heidisql.com/

W recorderze wykluczyłem a właściwie zostawiłem tylko to co jest potrzebne. Tak jak pisałem w db_included.yaml jest 100 encji na których mi zależy


Mimo takiego zapisu w configuration.yaml waga bazy stoi w miejscu.

a ile miałeś wcześniej zamiast tych 40?

Wcześniej nie miałem ustawionego ograniczenia

Czyli teraz zwiększyłeś z 10 do 40…

Jakkolwiek nadal przepisanie bazy jest zawsze w drugą niedzielę

Automatically repack the database every second sunday after the auto purge.

Jesteś starym forumowym wyjadaczem, czemu nie wklejasz kodu normalnie tylko jakieś obrazki…
Jak prawidłowo zamieszczać YAML, inny kod lub logi w postach na forum

Jakkolwiek wciąż nie mam pojęcia jak działa mariadb, to zakładam, że recorder każdą bazę traktuje mniej więcej jednakowo, więc zachodzę w głowę jak udało się wyhodować bazę o tak gigantycznym rozmiarze.

Przez kilka dni nie miałem czasu zajmować się HA. Dzisiaj wchodzę naphpMyAdmin i widzę że baza danych zmniejszyła się czarodziejsko :slight_smile:

Teraz pozostaje kwestia konwersji na sqllite.
Proszę o pomoc jak zrobić prawidłowo dump bazy aby przekonwertować ją na sqllite.

Jeśli do tej pory nie znalazłeś na oficjalnym forum HA wątków na zbliżone tematy

w tym tego tutoriala

to wątpię w sukces operacji (zauważ - gość w tutorialu pozbywa się akurat praktycznie całych gęstych danych, czego chyba nie chcesz robić skoro zwiększyłeś liczbę przechowywanych dni z 10 do 40)
Tak swoją drogą tak mi zaświtało, że niektórzy swego czasu ustawiali sobie recorder na 365 dni lub więcej - czy to było faktyczne źródło tego rozmiaru bazy?

Udało mi się zmigrować bazę do sqllite. Dziękuje za podpowiedzi. Skorzystałem z przewodnika z drugiego linku. Wcześniej też czytałem ten przewodnik ale miałem problemy z instalacją mysql-to-sqlite3 z tego pierwszego linku też próbowałem skorzystać ale nie umiałem się połączyć HeidiSQL do bazy danych HA.

W dodatku MariaDB trzeba udostępnić port dla Heidi, musi on być inny niż port Bazy bo przy następnym rozruchu Baza nie wystartuje.

1 polubienie

@Robert W tyle głowy mam zamiar z sqlite zmigrować do mariadb, bo to imho docelowo lepsze rozwiązanie (czyt. prawdziwy serwer bazy danych) a tu trafiam na Twój wątek. Możesz zdradzić dlaczego zmigrowałeś do sqlite? Co było głównym powodem? No bo na pewno nie rozmiar bazy, on zależy stricte od ilości danych, więc co?