Configuration de mysql/mariadb

Note

S’agissant d’une instance de développement utilisant docker-compose,

l’enchainement de commandes suivantes devrait faire l’affaire et remplacer le déroulé de la doc (attention, efface la BDD) :

make dev_db_clear
make dbv_db_start
endi-load-demo-data development.ini
endi-migrate development.ini upgrade
docker-compose -f db-docker-compose.yaml run --rm mariadb  \
    mysqlcheck -u root -proot -P 3306 -hmariadb --auto-repair --optimize --all-databases
MYSQL_CMD="docker-compose -f db-docker-compose.yaml run --rm mariadb mysql -u root -proot -P 3306 -hmariadb" ./tools/migrate_encoding.sh

Afin de gérer correctement les différents types de caractères, nous utilisons le format utf8mb4.

Il faut pour cela configurer correctement le serveur mariadb correspondant :

  • Sous fedora/RHEL : dans un des fichiers /etc/my.cnf ou un fichier du répertoire /etc/my.cnf.d/

  • Sous Debian/Ubuntu : dans un des fichiers /etc/mysql/mariadb.cnf ou un fichier du répertoire /etc/mysql/mariadb.conf.d/

[mysql]
default-character-set=utf8mb4


[mysqld]
# Permet d'assurer que la connexion du client est forcée
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
character-set-server = utf8mb4

NB : le serveur mariadb (ou mysql) doit être relancé après modification

Si ces modifications ont été effectuées sur un serveur existant, il faut lancer la commande suivante (le -p si votre utilisateur root mysql a un mot de passe)

mysqlcheck -u root -p --auto-repair --optimize --all-databases

Configuration de enDI

Une fois la base de données configurée avec l’encodage utf8mb4 il faut indiquer à enDI de l’utiliser.

Pour cela il faut modifier les fichiers de config (.ini) de endi et endi_celery et modifier l’encodage passé en paramètre à la chaîne de connexion mysql :

sqlalchemy.url = mysql://endi:endi@127.0.0.1:13306/endi?charset=utf8mb4

Migration de base de données existantes

La commande suivante migre les tables et colonne de la base de données “endi” vers l’encodage utf8mb4. Elle peut être lancée plusieurs fois (le -p si votre utilisateur root mysql a un mot de passe).

MYSQL_CMD='mysql -u root -p' ./tools/migrate_encoding.sh