# Guide de migration SQLite → MariaDB ## Prérequis 1. **Conteneur MariaDB** : Vous devez avoir un conteneur MariaDB qui tourne sur votre Raspberry Pi 2. **Accès réseau** : Votre machine de développement doit pouvoir accéder au conteneur MariaDB 3. **Backup** : Assurez-vous d'avoir une sauvegarde de votre base SQLite actuelle ## Étape 1 : Configurer MariaDB ### Sur le Raspberry Pi (conteneur Docker) Connectez-vous au conteneur MariaDB : ```bash docker exec -it mariadb mysql -u root -p ``` Puis exécutez le script SQL : ```sql -- Créer la base de données CREATE DATABASE IF NOT EXISTS duhaz_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Créer l'utilisateur (changez le mot de passe !) CREATE USER IF NOT EXISTS 'duhaz_user'@'%' IDENTIFIED BY 'votre_mot_de_passe_securise'; -- Donner les privilèges GRANT ALL PRIVILEGES ON duhaz_blog.* TO 'duhaz_user'@'%'; FLUSH PRIVILEGES; ``` Vous pouvez aussi utiliser le script fourni : ```bash docker exec -i mariadb mysql -u root -p < scripts/setup_mariadb.sql ``` ## Étape 2 : Installer les dépendances Sur votre machine de développement : ```bash cd /Users/duhaz/projets/blog-duhaz pip install -r requirements.txt ``` Cela installera `mysqlclient` pour la connexion à MariaDB. ## Étape 3 : Configuration du fichier .env ### Pour la migration (étape d'export) Gardez d'abord la configuration SQLite pour exporter les données : ```env # .env SECRET_KEY=votre_cle DEBUG=True # Base de données SQLite (pour l'export) # DATABASE_NAME=db.sqlite3 # Laisser commenté pour l'instant # DB_ENGINE=mysql # DB_NAME=duhaz_blog # DB_USER=duhaz_user # DB_PASSWORD=votre_mot_de_passe # DB_HOST=mariadb # DB_PORT=3306 ALLOWED_HOSTS=localhost,127.0.0.1 ``` ## Étape 4 : Exécuter le script de migration ```bash python scripts/migrate_to_mariadb.py ``` Le script va : 1. ✅ Exporter toutes vos données de SQLite vers `backup/sqlite_data.json` 2. ⏸️ Vous demander de modifier le `.env` pour activer MariaDB 3. ✅ Créer les tables dans MariaDB 4. ✅ Importer toutes vos données 5. ✅ Vérifier que tout est bien migré ### Quand le script vous le demande Modifiez votre `.env` pour activer MariaDB : ```env # .env SECRET_KEY=votre_cle DEBUG=True # Base de données SQLite (ancienne config - commentée) # DATABASE_NAME=db.sqlite3 # Base de données MariaDB (ACTIVE) DB_ENGINE=mysql DB_NAME=duhaz_blog DB_USER=duhaz_user DB_PASSWORD=votre_mot_de_passe_securise DB_HOST=mariadb # ou l'IP de votre RPI DB_PORT=3306 ALLOWED_HOSTS=localhost,127.0.0.1 ``` Puis appuyez sur Entrée pour continuer la migration. ## Étape 5 : Vérification Testez votre application : ```bash python manage.py runserver ``` Vérifiez que : - ✅ Tous vos articles sont présents - ✅ Les utilisateurs peuvent se connecter - ✅ L'administration fonctionne - ✅ Les images et médias sont accessibles ## Étape 6 : Commandes utiles ### Vérifier la connexion à MariaDB ```bash python manage.py dbshell ``` ### Créer un superutilisateur (si nécessaire) ```bash python manage.py createsuperuser ``` ### Vérifier les migrations ```bash python manage.py showmigrations ``` ### Faire un backup de MariaDB ```bash # Sur le Raspberry Pi docker exec mariadb mysqldump -u root -p duhaz_blog > backup_mariadb_$(date +%Y%m%d).sql ``` ## Dépannage ### Erreur de connexion Si vous ne pouvez pas vous connecter à MariaDB : 1. Vérifiez que le conteneur MariaDB est bien démarré : ```bash docker ps | grep mariadb ``` 2. Vérifiez que le port 3306 est exposé : ```bash docker port mariadb ``` 3. Testez la connexion réseau : ```bash telnet 3306 ``` 4. Vérifiez les logs du conteneur : ```bash docker logs mariadb ``` ### Erreur "Access denied" Vérifiez que l'utilisateur a bien les bonnes permissions : ```sql docker exec -it mariadb mysql -u root -p SHOW GRANTS FOR 'duhaz_user'@'%'; ``` ### Erreur de charset Si vous avez des problèmes d'encodage (caractères accentués) : ```sql ALTER DATABASE duhaz_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ## Notes importantes 1. **Backup** : Le fichier `backup/sqlite_data.json` contient toutes vos données. Conservez-le ! 2. **SQLite** : Ne supprimez pas `db.sqlite3` tant que vous n'avez pas confirmé que tout fonctionne 3. **Mot de passe** : Utilisez un mot de passe fort pour l'utilisateur MariaDB 4. **Réseau** : Si votre RPI est sur un réseau local, utilisez son IP au lieu de "mariadb" dans `DB_HOST` ## Rollback (retour en arrière) Si quelque chose ne va pas, vous pouvez revenir à SQLite : 1. Modifiez `.env` pour commenter les lignes MariaDB 2. Décommentez `DATABASE_NAME=db.sqlite3` 3. Redémarrez l'application Vos données SQLite originales sont intactes dans `db.sqlite3`.