Home Assistant: храним данные в базе MySQL

Продолжаю изучать и настраивать Home Assistant.
В этой заметке рассмотрим перевод базы данных с SQLite на MySQL (MariaDB).
Данный материал подойдет для интеграции различных установок Home Assisstant:

По этой причине все можно будет повторить в операционных системах Linux и FreeBSD.
Если есть кто ставит HA на Windows, то и для них это подойдет:)

MySQL сервер для Home Assistant

Я буду использовать операционную систему Ubuntu 20.04.
Базу данных MariaDB, но это не принципиально, можно использовать MySQL.

Для чего нужно использовать MySQL базу данных? 

По умолчанию HA использует SQLite базу данных, в чем плюсы и минусы такого решения?

Плюсы SQLite:

  1. Готово к использованию «из коробки»
  2. Одна база — один файл
  3. Легкая переносимость

Минусы SQLite:

  1. Производительность
  2. Масштабируемость
  3. Нет возможности (простой) базу на другую ноду

Многие устанавливают Home Assistant на одноплатники Raspberry Pi.
В которых накопителем является MicroSD карата, которая часто выходит из строя из-за частых операций записи.
База данных как раз является основным потребителем записи:) 
Сейчас конечно есть возможность установить HA не на карту памяти, а например на внешний жесткий диск или сменить MicroSD карту на eMMC
На мой взгляд проще выделить место на домашнем сервере или даже на любой VDS или VPS сервере.
Т.е. базу MySQL нет необходимости хранить на том же хосте, где установлен Home Assistant.

Установка базы данных MiraDB

Ubuntu:

sudo apt install mariadb-server

FreeBSD:

sudo pkg install mariadb104-server-10.4.13_4

Настройка MySQL базы данных

По умолчанию MariaDB и MySQL серверы принимают соединения на localhost 3306 порту:

netstat -an | grep 3306
tcp4       0      0 127.0.0.1.3306         *.*                    LISTEN

Если у вас HA установлен с помощью виртуального окружения Python, то вы спокойно можете использовать MariaDB с такими параметрами.
Если Home Assistant установлен в Docker, то до 127.0.0.1 в хост системе достучаться не получится.
Нам надо изменить сетевой адрес работы MariaDB с localhost на адрес сервера.
FreeBSD:

vi /usr/local/etc/mysql/my.cnf
bind-address = 192.168.66.1

Ubuntu:

vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 192.168.66.1

Про root пароль и безопасность MariaDB, можно узнать в этом материале

Перезапустим MariaDB:

FreeBSD:

# service mysql-server restart

Ubuntu:

# service mysql restart

Проверим на каком IP адресе теперь работает SQL сервер:

# netstat -an | grep 3306
tcp        0      0 192.168.66.1:3306       0.0.0.0:*               LISTEN

Создаем базу данных для Home Assistant и пользователя:

# mysql -p
CREATE DATABASE `hass_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'hassuser'@'localhost' IDENTIFIED BY 'StrongPassword';
grant all privileges on hass_db.* to 'hassuser'@'%' identified by 'StrongPassword';
FLUSH PRIVILEGES;
\q

Верхнем командой мы создали:

  • Базу с именем hass_db с кодировкой utf8mb4 и представлением utf8mb4_general_ci
  • Пользователя hassuser с паролем StrongPassword
  • Добавили разрешения пользователю hassuser на базу hass_db
  • Перезагрузили таблицы предоставления (Не уверен, что это действие нужно)

Настраиваем Home Assistant на работу с новой базой

Нам необходимо в конфигурационном файле HA указать коннект с базой данных.

Открываем и редактируем файл конфигурации (у вас скорее всего путь другой): 

vi /usr/share/hassio/homeassistant/configuration.yaml
recorder:
  db_url: mysql://hassuser:StrongPassword@192.168.66.1/hass_db?charset=utf8

Перезапускаем Home Assistant:

# ha core restart

Либо из веб-интерфейса или как вы еще умеете:)

Посмотрим, что у нас появилось в базе данных:

mysql -u hassuser -pStrongPassword -h 192.168.66.1 -P 3306 -D hass_db
MariaDB [hass_db]> show tables;
+-------------------+
| Tables_in_hass_db |
+-------------------+
| events            |
| recorder_runs     |
| schema_changes    |
| states            |
+-------------------+
4 rows in set (0.000 sec)

MariaDB [hass_db]> show processlist;
+------+----------+--------------------+---------+---------+------+-------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+------+----------+--------------------+---------+---------+------+-------+------------------+----------+
|  882 | hassuser | 192.168.66.1:43028 | hass_db | Sleep | 25 | | NULL | 0.000 |
| 1059 | hassuser | 192.168.66.1:43614 | hass_db | Query | 0 | Init | show processlist | 0.000 |
+------+----------+--------------------+---------+---------+------+-------+------------------+----------+
2 rows in set (0.000 sec)

Видим, что таблицы созданы и есть запросы.

Более подробно о модуле recorder
На этом все. 

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.