# 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 <ip_raspberry_pi> 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`.
