Dans la continuité de mes déboires de base de données Home Assistant ICI
Je vous propose une méthode que j’ai utilisé lors de mes recherches pour faire faire un régime important à ma BDD.
Je vous rappelle que j’avais une base de données de 7,5Go en SQLite la base par défaut de HA. Au travers de lecture de-ci de-là en français en anglais, en diagonale parfois aussi, j’ai vu que MariaDB 1/10ème moins gourmand en taille que SQLite !
Ayant réduit ma base à 700Mo je me dis merveilleux ça encore une division pour 10 pour 70Mo Je pense que j’ai lu un peu vite, mais je ne retrouve pas l’article pour le relire sérieusement et comprendre ce 1/10ème. (J’espère que nos experts m’expliquerons à l’ici de ce mini tuto)
Pour moi c’est un réduction de 10% de la taille de la base SQLite tout au plus- mais c’est déjà ça. Ensuite cela peut préparer aussi le terrain pour une future externalisation de la base de données sur un autre support (Docker ou VM selon vos choix, envie et installation déjà en place)
J’ai testé la solution sur une VM Proxmox spécialement montée pour ça avec le script que bcp connaisse pour aller plus vite. J’aurais pu utiliser le template de VM que j’avais fait avec @barto_95 et @fredarro mais je n’y avais pas pensé.
J’ai injecté le Backup full de ma prod afin d’avoir la même base de données
Solution
La solution utilisée permet la migration rapide de la base de données SQLite par défaut de nos HA vers MariaDB/MySQL. Je préconise tout de même de partir d’un base pas trop grosse pour mettre les chance de son coté et ne pas attendre trop longtemps non plus.
Aucun transfert de fichier n’est nécessaire pour traiter la base en dehors de HA, quelques lignes de commande dans le terminal et le tour est joué.
Les prérequis
- installer et activer l’addon MariaDB
- Installer et activer l’addon Terminal & SSH
Étapes de la migration de Maria DB
- Arrêter le service d’enregistreur à partir des outils de développement
« Outils de développement » > « Services » > « Recorder Disable » > Appuyer sur le « Appeler le service » - Démarrer l’addon MariaDB si c’est pas déjà fait
- Démarrez l’addon Terminal & SSH
- Exécutez les commandes ci-dessous pour installer python
- Exécuter les commande nécessaire à la migration de la base de données
Après la migration (réussie bien entendu)
- Configurez HA pour utiliser le nouveau mariadb comme enregistreur dans configuration.yaml
Commandes pour faire la migration
Installation des pré-requis dans le terminal SSH
apk add python3
apk add py3-pip
pip3 install sqlite3-to-mysql
Démarrage de la migration (changer PASSWORD, DATABASE_NAME et DATABASE_USER)
sqlite3mysql \
--sqlite-file /config/home-assistant_v2.db \
--mysql-database DATABASE_NAME \
--mysql-host core-mariadb \
--mysql-user DATABASE_USER \
--mysql-password 'YOURPASSWORD'
Ces éléments sont ceux présent dans la configuration de l’addon MariaDB
DATABASE_NAME = homeassistant
DATABASE_USER = homeassistant
YOURPASSWORD = Votre mot de passe
(optionnel, include --chunk INTEGER pour exécuter la migration par blocs d’enregistrements. Cela peut aider les grande bases de données surtout si on a peu de ressources machine.)
Allez lancement de la migration à 21h36 fin de la migration à 21h56 soit 20 minutes pour 700/800Mo. 20 minutes pendant lesquels il n’y aurait pas enregistrement dans la base et on comprends pourquoi non ?
Arguments pour le script et plus d’informations ici → sqlite3-to-mysql · PyPI
Maintenant que la base est migrée, il faut configurer HA pour utiliser la nouvelle base de données MariaDB comme enregistreur au niveau de votre fichier configuration.yaml
Au niveau de votre recorder il faut ajouter la ligne en début :
db_url: !secret db_mysql
Et dans le fichier secret il faut mettre
db_mysql: mysql://user:mot_de_passe@coremariadb/homeassistant?charset=utf8mb4
J’ai installé l’addon phpMyAdmin enfin, et une fois démarré je suis aller sur la partie compte utilisateur.
Vous y trouverez donc votre nom de user indiqué dans MariaDB. Vous le sélectionnez et vous aller tomber sur cette écran :
Cliquez sur Privilèges globaux → Tout cocher
Puis tout en bas appuyer sur Exécuter
Voilà on touche à la fin tout doit repartir comme avant ni vue ni connue et je ne crois pas avoir oublié d’étape dans tout ça.
Après 48h mes deux instances HA (une sous SQLite et l’autre sous MariaDB ont une BDD identique en taille) donc je ne sais vraiment pas si je vais franchir le cap en production pour le moment.
NB :
- je ne suis pas responsable des manipulations que vous faites,
- Mon contexte n’est pas le votre donc je ne peux pas dire si cela se passera aussi bien pour vous que pour moi.
- Je n’ai pas non plus les compétences pour vous dépanner sur vos installations donc faites des sauvegardes de vos données et de vos HA avant de vous lancer
Ma prochaine étape :
Suivre les travaux démarrer et certainement pas loin d’être finalisé de @SNoof
Suivi de prêt pas les très actifs @Pulpy-luke, @Golfvert et @Neuvidor