사물인터넷 | IoT/Home Assistant

[Synology] Home Assistant의 DB(Recoder)를 MariaDB로 변경하기

728x90
728x90

안녕하세요. JGP입니다.

Home Assistant를 사용한지 어느 덧 1년이 다 되어갑니다.
불편한 것을 하나씩 개선해 나가다 보니 스마트 홈에 점점 더 가까이 다가가고 있습니다.

오늘 또 하나의 불편한 점을 개선해보고자 합니다.


| 잘 돌아가는데 굳이 바꾸는 이유

HA는 기본적으로 SQLite를 사용하고 있습니다. SQLite는 기본적으로 느립니다!

제 시놀로지에는 MariaDB가 24시간 구동중인데(개인 서비스를 위해),
여기에 DB 데이터를 저장한다면.. 빠른 속도를 챙길 수 있을 것이기도 하고!

저희 집 HA는 Synology 작업 스케줄러를 통해 데이터 폴더 전체가 매 시간 압축되어 백업됩니다.
그런데 사진 상 용량을 보세요. 미쳤죠?

용량이 저렇게 큰 이유는, 다름 아닌 DB 때문입니다.

미친 용량..

중복되는 고용량의 파일을 굳이 백업하는 것은 용량 낭비에, 리소스 낭비입니다.
그래서 어차피 돌아가고 있는 MariaDB 쪽으로 데이터베이스를 이전하여 용량도 아끼고, 속도도 챙기면 좋으니, 작업해보려고 합니다.

 


| 작업 환경

현재 Synology DS218+에 Docker 컨테이너 위에 Home Assistant Core를 설치하여 사용중인 상황입니다.
또한 MariaDB 및 phpmyadmin은 Synology 기본 패키지를 사용하였습니다. MariaDB 버전은 MariaDB 10 입니다.

 


| 백업 및 삭제



문제가 생겼을 때, 과거의 나를 미워하면서 후회하지 말고, 우선 기존 DB 파일을 백업해둡시다.
실시간으로 데이터가 들어오고 나가고 있는 상황이므로, Home Assistant를 잠시 끄고 진행하시면 좋습니다.

HA 서비스를 중지했다면, HA 폴더 내부에 home-assistant_v2.db 파일을 백업 후 삭제해주세요.

 


| configuration.yaml

configuration.yaml 을 열고 아래 내용을 최상단에 입력합니다.
여기서 각 값은 아래와 같습니다.

  • hass': 사용자 이름
  • 'password': 비밀번호
  • '192.168.0.x': Synology 주소(DB 주소)
  • '3307': MariaDB 포트
  • 'HA': 데이터베이스 이름

아래 내용은 예시일 뿐이며, 본인이 원하시는 값으로 알맞게 수정하여 설정하시면 됩니다.
아래 예시와 다른 값을 사용한다면, 이후 단계에서도 해당 값을 입력해주시면 되겠습니다.

recorder:
  db_url: mysql://hass:password@192.168.0.x:3307/HA?charset=utf8

 


| MariaDB 설정(Synology 패키지)

* 이 단계는 Synology에 MariaDB 10을 먼저 설치했다고 가정하고 설명합니다.

반드시 MariaDB에서 TCP/IP 연결 활성화 항목이 체크되어있는지 확인해봅니다.
체크가 안되어있다면 체크한 후, 적용을 눌러주시면 됩니다.

만약 최초로 설치했다면 루트 패스워드 변경을 눌러 비밀번호를 설정해주셔야 phpmyadmin에서 접근이 가능합니다.

 


| 새 DB 테이블 생성

* 이 단계는 Synology에 phpmyadmin 패키지를 설치했다고 가정하고 설명합니다.

  • http://[Synology의 내부망 IP]/phpmyadmin 으로 접속합니다.
    (예 : 192.168.0.1/phpmyadmin)
  • root / [전 단계에서 설정한 루트 패스워드] 로 로그인합니다.

  • 좌측 상단에서 '새로운' 버튼을 클릭하여 새 테이블 생성 화면으로 이동합니다.

  • 테이블 명은 'HA', 인코딩은 utf8_bin으로 설정 후 만들기 버튼을 누릅니다.
  • 이전 단계에서 데이터베이스 이름을 다른 것으로 지정한 경우 해당 이름으로 설정해야 합니다.

  • 좌측에서 새로 생성된 HA 테이블을 선택 한 후, 상단 탭에서 '권한' 버튼을 찾아 클릭합니다.

  • 사용자명 'hass', 암호 'password'를 입력 후 재입력 란에 'password'를 재입력 한 후, 하단 전체적 권한 탭에서 모두 체크를 눌러 전체 DB에 해당 사용자가 접근할 수 있도록 합니다.
  • 이전 단계에서 사용자 이름과 암호를 다른 것으로 지정한 경우 해당 값으로 설정해야 합니다.
  • 입력이 완료되었으면 아래로 쭉 스크롤 하여 우측 하단의 실행 버튼을 누르면 됩니다.

 


| Home Assistant 적용 확인

  • Home Assistant를 시작 또는 재시작하고 알림 탭을 확인해봅시다.
  • 깔끔하게 적용이 완료된 것을 확인할 수 있습니다.
  • 만약 recoder 또는 history/logbook/default_config 관련 이슈가 나타난다면, 무언가 설정이 잘못된 것일 수 있으니 재확인이 필요합니다.

 


| 결과 확인

기존 HA 기본 DB인 SQLite는 데이터 값을 조회하고 약 10~30초 정도의 시간이 필요했는데,
MariaDB로 이전하고 나서는 조회하자마자 값이 올라오는 미친 속도를 보여주었습니다.

 



백업된 파일을 보면 600MB 대의 용량에서 10MB 이하로 약 83배 이상 줄어든 용량을 확인할 수 있었습니다.

 


| 타 환경 이용자도 변경을 권장

Hass.io를 사용하고 있는 경우 Supervisor Add-on Store에서 MariaDB 애드온을 다운로드 후 설치하여 MariaDB를 사용할 수 있습니다.

따라서 타 플랫폼에서 HA를 사용하고 있는 사용자에게도 MariaDB 사용을 적극 권장합니다.
메모리 점유율 부분에 있어서도 도움이 많이 되기 때문에, 빠른 속도와 리소스 절약 차원에서 사용하면 좋을 것 같습니다.

 

감사합니다.

728x90
728x90