MIGRATION_MARIADB_OVERVIEW.md 7.3 KB

🔄 Migration vers MariaDB - Vue d'ensemble

Pourquoi migrer vers MariaDB ?

Avantages de MariaDB par rapport à SQLite

Critère SQLite MariaDB
Performance Bon pour <100k visites/jour Excellent pour millions de visites
Concurrence Problèmes avec écritures simultanées Gestion optimale des connexions
Taille BD Limite pratique ~1GB Plusieurs TB sans problème
Fonctionnalités Limitées Full-featured (triggers, procedures, etc.)
Sauvegardes Copie du fichier Outils professionnels (mysqldump, etc.)
Réplication Non Oui (master-slave, etc.)
Production Déconseillé pour forte charge Conçu pour la production

Cas d'usage idéaux pour MariaDB

Vous devriez migrer si :

  • Votre blog reçoit plus de 100 visiteurs simultanés
  • Vous prévoyez une croissance du trafic
  • Vous voulez des sauvegardes professionnelles
  • Vous avez plusieurs serveurs web (load balancing)
  • Vous voulez des outils d'administration avancés

SQLite suffit si :

  • Blog personnel avec peu de trafic (<1000 visites/jour)
  • Un seul serveur web
  • Pas de besoins de réplication
  • Simplicité prioritaire

📦 Ce qui est inclus

Scripts automatisés

  1. setup_mariadb.sh - Configure automatiquement MariaDB
  2. test_mariadb_connection.py - Vérifie la connexion avant migration
  3. migrate_to_mariadb.py - Migre toutes les données automatiquement

Documentation complète

  1. MIGRATION_MARIADB_RAPIDE.md - Démarrage rapide (5 étapes)
  2. docs/MIGRATION_MARIADB.md - Guide détaillé avec dépannage
  3. docs/CONFIGURATION_RESEAU_MARIADB.md - Configuration réseau avancée
  4. CHECKLIST_MIGRATION.md - Checklist complète pas à pas

Fichiers de configuration

  1. setup_mariadb.sql - Script SQL de configuration
  2. .env.example - Template avec paramètres MariaDB
  3. requirements.txt - Inclut mysqlclient

🚀 Migration en 5 minutes

Étape 1 : Configurer MariaDB

# Sur le Raspberry Pi
./scripts/setup_mariadb.sh

Étape 2 : Installer les dépendances

# Sur votre Mac
pip install -r requirements.txt

Étape 3 : Configurer .env

DB_ENGINE=mysql
DB_NAME=duhaz_blog
DB_USER=duhaz_user
DB_PASSWORD=votre_mot_de_passe
DB_HOST=192.168.x.x  # IP du RPI
DB_PORT=3306

Étape 4 : Tester la connexion

python scripts/test_mariadb_connection.py

Étape 5 : Migrer

python scripts/migrate_to_mariadb.py

🎯 Architecture recommandée

Développement (Mac)

┌─────────────┐
│     Mac     │
│   Django    │────► MariaDB sur RPI (192.168.x.x:3306)
│             │
└─────────────┘

Configuration .env :

DB_HOST=192.168.1.100  # IP du RPI
DB_PORT=3306

Production (Raspberry Pi)

┌────────────────────────────┐
│      Raspberry Pi          │
│                            │
│  ┌──────────┐  ┌─────────┐│
│  │  Django  │──│ MariaDB ││
│  │ (Docker) │  │ (Docker)││
│  └──────────┘  └─────────┘│
│       │                    │
└───────┼────────────────────┘
        │
        ▼
     Internet

Configuration .env :

DB_HOST=mariadb  # Nom du conteneur Docker
DB_PORT=3306

📊 Comparaison des performances

Temps de réponse (exemple sur un blog avec 10k articles)

Opération SQLite MariaDB Gain
Liste articles (10) 45ms 12ms 73% ⚡
Recherche full-text 230ms 35ms 85% ⚡
Création article 25ms 8ms 68% ⚡
Backup complet 2 min 30s 75% ⚡

Gestion de la concurrence

Scénario SQLite MariaDB
1 utilisateur ✅ Parfait ✅ Parfait
10 utilisateurs simultanés ⚠️ Acceptable ✅ Excellent
100 utilisateurs simultanés ❌ Locks fréquents ✅ Excellent
1000+ utilisateurs ❌ Impossible ✅ Excellent

🔒 Sécurité

Bonnes pratiques

  1. Mot de passe fort pour l'utilisateur MariaDB

    # Générer un mot de passe sécurisé
    openssl rand -base64 32
    
  2. Accès réseau limité

    -- Autoriser uniquement des IPs spécifiques
    CREATE USER 'duhaz_user'@'192.168.1.%' IDENTIFIED BY 'password';
    
  3. Backups réguliers

    # Cron quotidien
    0 2 * * * docker exec mariadb mysqldump -u root -p duhaz_blog > backup_$(date +\%Y\%m\%d).sql
    
  4. Monitoring

    • Surveiller les logs MariaDB
    • Alertes en cas de connexions échouées
    • Monitoring des performances

🛡️ Sauvegardes

Avant la migration

# SQLite (simple copie)
cp db.sqlite3 backup/db.sqlite3.$(date +%Y%m%d)

Après la migration

# Backup MariaDB (complet)
docker exec mariadb mysqldump -u root -p duhaz_blog > backup_$(date +%Y%m%d).sql

# Backup MariaDB (structure seulement)
docker exec mariadb mysqldump -u root -p --no-data duhaz_blog > schema.sql

# Backup MariaDB (données seulement)
docker exec mariadb mysqldump -u root -p --no-create-info duhaz_blog > data.sql

Restauration

# Restaurer depuis un backup
docker exec -i mariadb mysql -u root -p duhaz_blog < backup_20251103.sql

🔧 Maintenance

Optimisation des tables

-- Analyser les tables
ANALYZE TABLE blog_article;

-- Optimiser les tables
OPTIMIZE TABLE blog_article;

-- Vérifier l'intégrité
CHECK TABLE blog_article;

Monitoring des performances

-- Requêtes lentes
SHOW PROCESSLIST;

-- Statistiques des tables
SHOW TABLE STATUS LIKE 'blog_%';

-- Taille de la base
SELECT 
    table_schema AS 'Database',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'duhaz_blog'
GROUP BY table_schema;

🆘 Support

Documentation

  1. Démarrage rapide : MIGRATION_MARIADB_RAPIDE.md
  2. Guide complet : docs/MIGRATION_MARIADB.md
  3. Réseau : docs/CONFIGURATION_RESEAU_MARIADB.md
  4. Checklist : CHECKLIST_MIGRATION.md

En cas de problème

  1. ✅ Consultez docs/MIGRATION_MARIADB.md section "Dépannage"
  2. ✅ Vérifiez les logs : docker logs mariadb
  3. ✅ Testez la connexion : python scripts/test_mariadb_connection.py
  4. ✅ Revenez à SQLite si nécessaire (votre db.sqlite3 est intact)

Rollback rapide

Si vous devez revenir à SQLite :

# .env
# DB_ENGINE=mysql  # Commentez cette ligne
DATABASE_NAME=db.sqlite3  # Décommentez

Vos données SQLite sont intactes et vous pouvez y revenir à tout moment.

📈 Évolution future

Une fois sur MariaDB, vous pourrez facilement :

  • ✅ Mettre en place la réplication master-slave
  • ✅ Configurer un cluster haute disponibilité
  • ✅ Utiliser des outils de monitoring avancés (Percona, etc.)
  • ✅ Optimiser avec des indexes avancés
  • ✅ Implémenter du caching avancé (Redis + MariaDB)

🎉 Prêt à migrer ?

Consultez MIGRATION_MARIADB_RAPIDE.md pour commencer maintenant !