Base de données¶
L'API s'appuie sur MariaDB. Deux rôles distincts, éventuellement portés par le même serveur :
| Rôle | Clés de configuration | Contenu |
|---|---|---|
| Base principale | db_hostname, db_port, db_password |
Domaines, agents, modules D.L.S, synoptiques, utilisateurs |
| Base d'archives | db_arch_hostname, db_arch_port |
Historique des valeurs et des messages |
Info
Si db_arch_hostname et db_arch_port sont identiques à db_hostname et db_port,
l'API n'ouvre qu'une seule connexion pour les deux rôles.
Installation¶
sudo apt install mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation
sudo dnf install mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation
Création du schéma¶
L'API crée et fait évoluer elle-même ses tables au démarrage : il n'y a pas de script de schéma à jouer manuellement. Elle a en revanche besoin d'un compte disposant des droits de création.
CREATE USER 'abls'@'%' IDENTIFIED BY 'un-mot-de-passe-solide';
GRANT ALL PRIVILEGES ON *.* TO 'abls'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Droits étendus
L'API crée une base par domaine. Elle a donc besoin de droits globaux, et non de droits restreints à une base nommée. Isolez l'instance MariaDB si cela pose problème.
Renseignez ensuite /etc/abls-habitat-api.conf :
{
"db_hostname": "127.0.0.1",
"db_port": 3306,
"db_password": "un-mot-de-passe-solide"
}
Séparer les archives¶
Les archives grossissent vite : une valeur analogique archivée à la minute représente environ 525 000 lignes par an et par mnémonique. Les isoler sur un serveur ou un volume dédié simplifie la sauvegarde et le dimensionnement.
{
"db_hostname": "127.0.0.1",
"db_arch_hostname": "archives.interne.lan",
"db_arch_port": 3306
}
La rétention se règle côté domaine, depuis la Console : voir paramétrer les archives.
Réglages MariaDB utiles¶
# /etc/mysql/mariadb.conf.d/60-abls.cnf
[mysqld]
max_connections = 200
innodb_buffer_pool_size = 1G
innodb_file_per_table = ON
max_connections: l'API ouvre plusieurs connexions par domaine actif.innodb_file_per_table: indispensable pour pouvoir récupérer de l'espace après purge des archives.
Sauvegarde¶
Voir Sauvegarde et restauration pour la procédure complète. En résumé :
sudo mariadb-dump --all-databases --single-transaction --routines --events \
| gzip > /var/backups/abls-$(date +%F).sql.gz
Une sauvegarde non testée n'est pas une sauvegarde
Restaurez périodiquement sur une instance de test. Une base d'archives volumineuse peut rendre la restauration bien plus longue que prévu.
Dépannage¶
| Symptôme | Piste |
|---|---|
| L'API ne démarre pas, erreur de connexion SQL | Vérifier db_hostname, le bind-address de MariaDB, le pare-feu |
Access denied for user 'abls' |
Le GRANT n'a pas été appliqué, ou l'hôte source ne correspond pas |
| Lenteurs à l'affichage des courbes | Base d'archives sous-dimensionnée ; augmenter innodb_buffer_pool_size ou réduire la rétention |
| Disque plein | Purger les archives depuis la Console, puis OPTIMIZE TABLE |