Documentation ZFS: Difference between revisions

From Nasqueron Agora
Created page with "= Guide Complet : Déploiement de MariaDB avec ZFS sur db-B-001 = Last updated: Friday, November 28, 2025 == Introduction == Ce guide complet explique comment configurer MariaDB avec InnoDB sur un serveur FreeBSD utilisant ZFS pour le stockage, en montant spécifiquement les datasets ''mysql-innodb-data'' et ''mysql-innodb-logs'' en dehors du répertoire ''/var/db/mysql''. == Prérequis == * Serveur FreeBSD 14.3 avec ZFS et MariaDB 10.11.15 installés * Pool ZFS ''arco..."
 
(No difference)

Latest revision as of 17:20, 28 November 2025

Guide Complet : Déploiement de MariaDB avec ZFS sur db-B-001

Last updated: Friday, November 28, 2025

Introduction

Ce guide complet explique comment configurer MariaDB avec InnoDB sur un serveur FreeBSD utilisant ZFS pour le stockage, en montant spécifiquement les datasets mysql-innodb-data et mysql-innodb-logs en dehors du répertoire /var/db/mysql.

Prérequis

  • Serveur FreeBSD 14.3 avec ZFS et MariaDB 10.11.15 installés
  • Pool ZFS arcology opérationnel avec espace disponible
  • Accès root ou sudo
  • Connaissances de base en administration système et ZFS

Architecture Cible

  • Datasets ZFS dédiés pour les données et logs InnoDB
  • Points de montage personnalisés : /mysql-innodb-data et /mysql-innodb-logs
  • Configuration optimisée pour les performances
  • Système de sauvegarde via snapshots ZFS

Fichiers de Configuration MariaDB

Sur FreeBSD avec MariaDB :

  • **Fichier principal de configuration** : /usr/local/etc/mysql/my.cnf
  • Fichiers complémentaires :
 * /usr/local/etc/my.cnf (lien symbolique vers le fichier principal)
 * /usr/local/etc/mysql/conf.d/server.cnf (configuration spécifique)

Étapes de Déploiement

Phase 1 : Préparation de l'Environnement

1.1 Vérification des versions

mysql --version
zpool list
zfs list

1.2 Création des datasets ZFS

# Création avec points de montage personnalisés
sudo zfs create -o mountpoint=/mysql-innodb-data arcology/mysql-innodb-data
sudo zfs create -o mountpoint=/mysql-innodb-logs arcology/mysql-innodb-logs

# Configuration des propriétés
sudo zfs set recordsize=16K arcology/mysql-innodb-data
sudo zfs set recordsize=128K arcology/mysql-innodb-logs
sudo zfs set primarycache=metadata arcology/mysql-innodb-data
sudo zfs set primarycache=metadata arcology/mysql-innodb-logs

Phase 2 : Configuration des Permissions

sudo chown -R mysql:mysql /mysql-innodb-data
sudo chown -R mysql:mysql /mysql-innodb-logs
sudo chmod -R 750 /mysql-innodb-data
sudo chmod -R 750 /mysql-innodb-logs

Phase 3 : Migration des Données

3.1 Arrêt du service MariaDB

sudo service mysql-server stop

3.2 Déplacement des fichiers

sudo mv /var/db/mysql/ibdata1 /mysql-innodb-data/
sudo mv /var/db/mysql/ib_logfile* /mysql-innodb-logs/

3.3 Création des liens symboliques

sudo ln -s /mysql-innodb-data/ibdata1 /var/db/mysql/ibdata1
sudo ln -s /mysql-innodb-logs/ib_logfile* /var/db/mysql/

Phase 4 : Configuration de MariaDB

4.1 Modification du fichier principal

sudo nano /usr/local/etc/mysql/my.cnf

Ajouter/modifier dans le fichier principal :

[mysqld]
datadir = /var/db/mysql
innodb_data_home_dir = /mysql-innodb-data
innodb_log_group_home_dir = /mysql-innodb-logs
innodb_data_file_path = ibdata1:10M:autoextend
skip-innodb_doublewrite

4.2 Vérification de la configuration

Pour vérifier que le bon fichier est utilisé :

mysql --print-defaults

4.3 Structure des fichiers de configuration

  • /usr/local/etc/my.cnf → Lien symbolique vers /usr/local/etc/mysql/my.cnf
  • /usr/local/etc/mysql/my.cnf → **Fichier principal de configuration**
  • /usr/local/etc/mysql/conf.d/ → Répertoire pour les configurations modulaires

Phase 5 : Optimisation

5.1 Activation de la compression

sudo zfs set compression=lz4 arcology/mysql-innodb-data
sudo zfs set compression=lz4 arcology/mysql-innodb-logs

5.2 Autres optimisations ZFS

# Désactivation du cache flush si matériel approprié
sudo zfs set zfs_nocacheflush=1 arcology

# Configuration de l'ARC pour métadonnées seulement
sudo zfs set primarycache=metadata arcology

Phase 6 : Redémarrage et Vérification

sudo service mysql-server start
sudo tail -n 20 /var/db/mysql/windriver.err

Vérification SQL :

SHOW VARIABLES LIKE 'innodb_data_home_dir';
SHOW VARIABLES LIKE 'innodb_log_group_home_dir';

Phase 7 : Sauvegarde et Restauration

7.1 Création de snapshots

sudo zfs snapshot arcology/mysql-innodb-data@$(date +%Y%m%d)
sudo zfs snapshot arcology/mysql-innodb-logs@$(date +%Y%m%d)

7.2 Procédure de restauration

# Arrêter MariaDB avant restauration
sudo service mysql-server stop

# Restauration
sudo zfs rollback arcology/mysql-innodb-data@20231128
sudo zfs rollback arcology/mysql-innodb-logs@20231128

# Redémarrer MariaDB
sudo service mysql-server start

Bonnes Pratiques pour la Configuration

1. **Toujours modifier le fichier principal** : /usr/local/etc/mysql/my.cnf 2. Pour des configurations spécifiques, créer des fichiers dans /usr/local/etc/mysql/conf.d/ 3. Vérifier la syntaxe après modification :

   sudo mysqld --verbose --help 2>/dev/null | head

4. Après modification, toujours redémarrer le service :

   sudo service mysql-server restart

Résolution des Problèmes Courants

Problème : MariaDB ne démarre pas

  • Vérifier les permissions :
  ls -la /mysql-innodb-data
  ls -la /var/db/mysql/
  • Consulter les logs :
  sudo tail -n 50 /var/db/mysql/windriver.err
  • Vérifier la syntaxe du fichier de configuration :
  sudo mysql --print-defaults
  sudo mysqld --verbose --help 2>/dev/null | head

Problème : Performances dégradées

  • Vérifier la fragmentation :
  zfs get fragmentation arcology/mysql-innodb-data
  • Surveiller l'utilisation mémoire :
  top
  • Ajuster recordsize si nécessaire (16K pour OLTP, 128K pour les logs)

Commandes Utiles

Action Commande
Vérifier l'état du pool ZFS
zpool status arcology
Lister les datasets
zfs list -t all
Vérifier les points de montage
df -h | grep mysql
Voir les propriétés d'un dataset
zfs get all arcology/mysql-innodb-data
Prendre un snapshot daté
sudo zfs snapshot arcology/mysql-innodb-data@$(date +%Y%m%d_%H%M)
Voir les snapshots existants
zfs list -t snapshot
Vérifier le fichier de configuration utilisé
mysql --print-defaults
Vérifier la syntaxe de configuration
sudo mysqld --verbose --help 2>/dev/null | head

Annexes

Configuration Avancée ZFS

Pour les environnements de production, considérer :

# Séparation des logs ZIL sur SSD
sudo zpool add arcology log /dev/ada2

# Configuration L2ARC pour cache supplémentaire
sudo zpool add arcology cache /dev/ada3

Exemple de Script de Sauvegarde

#!/bin/sh
# Sauvegarde quotidienne des datasets MariaDB
POOL="arcology"
DATE=$(date +%Y%m%d_%H%M)

# Verrouillage des tables
mysql -e "FLUSH TABLES WITH READ LOCK; SYSTEM zfs snapshot $POOL/mysql-innodb-data@db_backup_$DATE; SYSTEM zfs snapshot $POOL/mysql-innodb-logs@db_backup_$DATE; UNLOCK TABLES;"

Vérification de la Configuration

Pour voir tous les paramètres actifs :

SHOW VARIABLES;

Pour voir les paramètres InnoDB spécifiques :

SHOW VARIABLES LIKE 'innodb%';