MariaDB
MariaDB est le serveur de base de données recommandé pour SAINet. MariaDB est basée sur MySQL et utilise les mêmes interfaces. Elle est toutefois préférée à MySQL pour des raisons de performances et de problèmes de corruption qui ont notamment été constatés sur MySQL 5.7 et MySQL 8.0.
Version
Suivant la version de SAINet installée, voici la version recommandée de la base de données:
Version | MariaDB |
---|---|
4.10.x | 10.5.x |
4.9.x | 10.4.x |
4.8.x | 10.4.x |
Installation
Linux
Pour installer MariaDB, utiliser la commande suivante:
apt-get install mariadb-server
systemctl start mariadb
Une fois la base de données installée, il est nécessaire de charger les TimeZone:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Certains paramètres doivent être appliqués pour SAINet. Pour ce faire, créer le fichier
/etc/mysql/conf.d/sainet-options.cnf
avec le contenu suivant:
[mysqld]
max-allowed-packet = 1024m
default-time-zone = 'Europe/Zurich'
Puis, redémarrer le service avec systemctl restart mariadb
.
Si le service ne redémarre pas, il se peut que les TimeZone n’aient pas été chargés correctement.
Windows
Utiliser l’exécutable MSI pour faire l’installation avec les options suivantes:
- Les outils de développement ne sont pas nécessaires.
- Les autres utilitaires ne sont pas nécessaires.
- Pas d’encoding par défaut.
Il se peut que l’installeur MSI ne fonctionne pas, notamment sur XEN. Dans ce cas, il faut utiliser les sources.
Une fois le service démarré, il est nécessaire de charger les fichiers de TimeZone. Il faut télécharger la version POSIX pour MySQL 5.7+ et les importer avec la comande suivante:
mariadb -u root mysql < timezone_posix.sql
Puis finalement, éditer le fichier <mariadb>\data\my.ini
pour ajouter les lignes suivantes dans la section [mysqld]
:
max-allowed-packet = 1024m
default-time-zone = 'Europe/Zurich'
Puis, redémarrer le service MariaDB.
Il est conseillé de configurer le service pour que celui-ci redémarre automatiquement en cas de défaillance.
Utilisateur SAINet
SAINet a besoin d’un utilisateur ayant tous les droits afin de pouvoir modifier le schema lors des mises à jour automatiques. Dans une console, exécuter la commande:
mysql -u root -p mysql
Puis ensuite, les requêtes suivantes (en remplaçant <user>
et <password>
par les valeurs désirées):
GRANT ALL PRIVILEGES ON *.* TO '<user>'@localhost IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
Création du schema
SAINet aura besoin d’un schema vide afin d’initialiser la base de données:
mysql -u <user> -p -e "CREATE DATABASE <database>"
Généralement, le nom de base de données sera sainet_prod
pour un serveur de production.
A ce stade, la base de données est prête à être utilisée. Les paramètres de connexion à la base seront à préciser lors de l’installation de SAINet. Les tables seront ensuite créées automatiquement.
Erreur InnoDB Page Size
Si une base de données existante est importée, MariaDB peut sortir l’erreur suivante:
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Dans ce cas-là, appliquer la procédure suivante:
- Disposer d’un dump de la base de données (
mysqldump -u <user> -p <schema> --max-allowed-packet=1024m > dump.sql
). - Stopper le service MariaDB.
- Ajouter l’option
innodb_page_size = 32k
dans<mariadb>\data\my.ini
sous le tag[mysqld]
(cf valeurs possibles). - Supprimer les fichiers
ibdata1
etib_logfile*
dans le répertoire<mariadb>\data
. Ceux-ci seront recréés lors du redémarrage de MariaDB (source). - Redémarrer le service MariaDB
- Réimporter la base de données
Sauvegarde
Afin de créer un fichier de données SQL, exécuter la commande suivante:
mysqldump -u <user> -p --max-allowed-packet=1024m <database> > dump.sql
L’option --max-allowed-packet
est importante car certaines tables (syspck
et syscls
) contiennent de gros fichiers.
Ce fichier peut ensuite être zippé et déplacé vers un emplacement sécurisé différent.
Restauration
Pour restaurer un fichier de données SQL, utiliser la commande suivante:
cat dump.sql | mysql -u <user> -p <database>
Les données actuelles vont être écrasées par la sauvegarde !
Le temps de restauration dépend de la taille de la base de données. Cela peut prendre jusqu’à plus d’une heure pour les bases de données de plusieurs Gigaoctets.