Cette partie concerne MariaDB.
Sur l'ancien serveur, c'était MariaDB 10.2, et sur le nouveau MariaDB 10.3.
Lorsque j'ai importé le fichier exporté (dump) représentant la sauvegarde de ma base de données, j'ai vu passer des messages d'erreur, tels que :
ERROR 1366 (22007) at line 22378 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value:
'\xF0\x9F\x93\xA3 A...' for column `moodle`.`mdl_logstore_standard_log`.`other` at row 4355
ERROR 1366 (22007) at line 34385 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value:
'\xF0\x9F\x93\xA2\xE2\x9A...' for column `moodle`.`mdl_notifications`.`subject` at row 180
ERROR 1366 (22007) at line 36202 in file: '/tmp/export_moodle.2022-06-20.sql': Incorrect string value:
'\xF0\x9F\x93\x84T\xC3...' for column `moodle`.`mdl_page`.`content` at row 71
Quelques recherches m'ont permis de comprendre que c'était un problème de réglage de MariaDB, qui n'était pas prévu pour le support UTF8 complet, avec encodage utf8mb4. Vérifié en lançant :
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
Je suis donc reparti de la
documentation adaptée, et j'ai copié le fichier de configuration de MariaDB de mon ancien serveur vers le nouveau.
Malheureusement, en relançant MariaDB (avec sudo systemctl start mariadb.service), cela bloquait, et j'obtenais cette erreur :
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.
Et en lançant sudo systemctl status mariadb.service :
mariadb.service - MariaDB 10.3 database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2022-06-21 19:49:19 CEST; 20s ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 112153 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
Process: 112357 ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NEW_CLUSTER (code=exited, status=7)
Process: 112318 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
Process: 112293 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
Main PID: 112357 (code=exited, status=7)
Status: "MariaDB server is down"
Jun 21 19:49:19 moodle-22 systemd[1]: Starting MariaDB 10.3 database server...
Jun 21 19:49:19 moodle-22 mysql-prepare-db-dir[112318]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
Jun 21 19:49:19 moodle-22 mysql-prepare-db-dir[112318]: If this is not the case, make sure the /var/lib/mysql is empty before running mysql-prepare-db-dir.
Jun 21 19:49:19 moodle-22 mysqld[112357]: 2022-06-21 19:49:19 0 [Note] /usr/libexec/mysqld (mysqld 10.3.32-MariaDB-log) starting as process 112357 ...
Jun 21 19:49:19 moodle-22 systemd[1]: mariadb.service: Main process exited, code=exited, status=7/NOTRUNNING
Jun 21 19:49:19 moodle-22 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Jun 21 19:49:19 moodle-22 systemd[1]: Failed to start MariaDB 10.3 database server.
Après plusieurs recherches infructueuses, j'ai essayé d'enlever mon fichier de configuration personnalisé (/etc/my.cnf.d/moodle.my.cnf), et cela a redémarré correctement. Je l'ai remis et constaté à nouveau le problème...
Après de nombreux tatonnements, je me suis aperçu que c'est le fait d'avoir certaines lignes de paramètres dans le fichier de configuration qui mettait la pagaille et empechait le démarrage !
En résumé, pour corriger cela, j'ai du désactiver (commenter) les lignes liées à : innodb_file_io_threads, innodb_file_format et innodb_large_prefix.
MariaDB ayant redémarré correctement, j'ai pu vérifier l'encodage et l'interclassement avec la commande suivante :
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
Ce qui m'a donné :
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
OK, on peut donc refaire l'importation de la base de données !
Séverin