# 🔄 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

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

### Étape 2 : Installer les dépendances

```bash
# Sur votre Mac
pip install -r requirements.txt
```

### Étape 3 : Configurer .env

```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

```bash
python scripts/test_mariadb_connection.py
```

### Étape 5 : Migrer

```bash
python scripts/migrate_to_mariadb.py
```

## 🎯 Architecture recommandée

### Développement (Mac)

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

Configuration `.env` :
```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` :
```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
   ```bash
   # Générer un mot de passe sécurisé
   openssl rand -base64 32
   ```

2. **Accès réseau limité**
   ```sql
   -- Autoriser uniquement des IPs spécifiques
   CREATE USER 'duhaz_user'@'192.168.1.%' IDENTIFIED BY 'password';
   ```

3. **Backups réguliers**
   ```bash
   # 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

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

### Après la migration

```bash
# 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

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

## 🔧 Maintenance

### Optimisation des tables

```sql
-- 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

```sql
-- 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
# .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 !
