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