Table des matières

MariaDB

MariaDB est une alternative plus optimisée à MySQL.

Migration MariaDB 5.5 à MariaDB 10.2

La version 5.5 (stable) est la version par défaut fournie sur toutes les distributions. Toutefois certaines fonctionnalités nécessite une version plus récente.

La migration vers la dernière version peut être effectuée avec la procédure suivante :

Sauvegarde

Réaliser une sauvegarde complète de la base de donnée.

mysqldump --all-databases

Arrêt des services

Arrêter l'ancien service et le désactiver.

systemctl stop mariadb
systemctl disable mariadb

Installation du dépôt

Installer le dépôt comformément à la documentation de MariaDB https://downloads.mariadb.org/mariadb/repositories/.

Exemple avec Centos7, il faut mettre dans le dossier /etc/yum.repo.d/mariadb.repo :

mariadb.repo
# MariaDB 10.2 CentOS repository list - created 2018-02-06 15:53 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Installation packages

Mettre à jour les packages :

yum install MariaDB-Server

Vérification

Vérifier le bon fonctionnement de MariaDB avec la commande :

systemctl status mysql

Charset

Niveau serveur

Le charset par défaut est dans les variables MariaDB :

SET character_set_server = 'utf8';
SET collation_server = 'utf8_general_ci';

Niveau Database

Il peut être défini à la création de la base, ou bien modifié par la suite avec la commande :

ALTER DATABASE czech_slovak_names COLLATE = 'utf8_general_ci';

Niveau des tables

ALTER TABLE MyTable CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Le script suivant peut être utile pour changer toutes les tables d'une base de donnée :

update.sh
#!/bin/bash
 
DATABASE="myDatabase"
CHARSET="utf8"
COLLATE="utf8_general_ci"
 
IFS=$'\n'
QUERY="SELECT CONCAT('ALTER TABLE \`$DATABASE\`.\`', TABLE_NAME,'\` CONVERT TO CHARACTER SET $CHARSET COLLATE $COLLATE;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$DATABASE' AND TABLE_TYPE='BASE TABLE' AND TABLE_COLLATION!='$COLLATE'"
 
for MYSQL_CMD in `mysql -B -e "$QUERY"`; do
  echo "$MYSQL_CMD"
  mysql -B -e "$MYSQL_CMD"
done